零基础学Python-爬虫-1、网络请求Requests【网络操作理论基础与实践·请认真看看理论,理论基础决定后期高度】
本套課程正式進入Python爬蟲階段,具體章節根據實際發布決定,可點擊【python爬蟲】分類專欄進行倒序觀看:
【重點提示:請勿爬取有害他人或國家利益的內容,此課程雖可爬取互聯網任意內容,但無任何收益,只為大家學習分享。】
開發環境:【Win10】
開發工具:【Visual Studio 2019】
Python版本:【3.7】
1、Python爬蟲的介紹
網絡爬蟲(又被稱為網頁蜘蛛(Web Spider),網絡機器人,好聽點的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網(www)信息的程序或者腳本。
在瀏覽器中輸入地址(網站地址URL:百度一下,你就知道)后,向服務器發送一個請求,服務器經過解析后發送給用戶瀏覽器結果。
爬蟲就是通過分析和過濾html代碼,從中獲取我們想要的資源(文本、圖片、音頻、視頻等)。
2、請求【request】與響應【response】
2.1、服務器處理請求的流程:
? (1)服務器每次收到請求時,都會為這個請求開辟一個新的線程。
? (2)服務器會把客戶端的請求數據封裝到request對象中,request就是請求數據的載體!
? (3)服務器還會創建response對象,這個對象與客戶端連接在一起,它可以用來向客戶端發送響應。
2.2、request—封裝了客戶端所有的請求數據
request的功能可以分為以下幾種:
(1)封裝了請求頭數據;
(2)封裝了請求正文數據,如果是GET請求,那么就沒有正文;
(3)request是一個域對象,可以把它當成Map來添加獲取數據;
(4)request提供了請求轉發和請求包含功能。
2.2.1、GET請求和POST請求的區別:
GET請求:
請求參數會在瀏覽器的地址欄中顯示,所以不安全;
請求參數長度限制長度在1K之內;#面試考點,我經常問面試者這個問題
GET請求沒有請求體,無法通過request.setCharacterEncoding()來設置參數的編碼;
POST請求:
請求參數不會顯示瀏覽器的地址欄,相對安全;#大廠一般請求都會是Post,包括很多read操作。
請求參數長度沒有限制;
2.3、response在python中的理解
Python django中我們經常用的response有django中的 JsonResponse, HttpResponse,還有DRF中的Response
在使用的時候,經常會不知道如何什么時候選擇用哪個response
下面簡單記錄下這三個response的區別
2.3.1、HttpResponse
它的返回格式為:HttpResponse(content=響應體, content_type=響應體數據類型, status=狀態碼)
1)它可以返回普通文本信息
HttpResponse("哈哈哈哈")
2)它可以像文本一樣追加內容:
res = HttpResponse("哈哈哈哈")
res.write("恩,我們是一個測試段落")
3)它還可以返回圖片,音頻,視頻等二進制文件信息
img = open(filepath,"rb")
data = img.read()
return HttpResponse(data, content_type="image/png")
2.3.2、JsonResponse
它繼承自HttpResponse,它主要用于返回json格式的數據
JsonResponse(jsonData,content_type="application/json")
2.3.3、RestFramework框架封裝的Response
它的返回格式為:
Response(data, status=None,template_name=None, header=None, content_type=None)
data:為python內建數據類型,DRF會使用render渲染器處理data
3、修改pip鏡像地址為國內地址(請保存此模塊)
國內鏡像地址
http://pypi.douban.com/simple/ 豆瓣
http://mirrors.aliyun.com/pypi/simple/ 阿里
http://pypi.hustunique.com/simple/ 華中理工大學
http://pypi.sdutlinux.org/simple/ 山東理工大學
http://pypi.mirrors.ustc.edu.cn/simple/ 中國科學技術大學
https://pypi.tuna.tsinghua.edu.cn/simple 清華
安裝命令:【賦復制粘貼即可】
pip install --index http://mirrors.aliyun.com/pypi/simple/ pandas4、安裝pip的requests包(注:如果pip不是最新的請直接所有pip安裝最新版本即可)
安裝完成后:
5、測試【requests】訪問網址:(前提是安裝了requests模塊才能使用import引入)
import requests #獲取請求的響應結果【response】 response=requests.get("http://www.baidu.com") #類型 print(type(response)) #響應狀態【200為成功】 print(response.status_code) #響應文本類型-一般都是str字符串 print(type(response.text)) #響應文本內容 print(response.text) #<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]> print(response.cookies) #響應內容 print(response.content) #修改響應的編碼格式 print(response.content.decode("utf-8"))5.1、重點理解
response.text返回的類型是str
response.content返回的類型是bytes,可以通過decode()方法將bytes類型轉為str類型
推薦使用:response.content.decode()的方式獲取相應的html頁面
5.2、擴展理解
-
response.text?
解碼類型:根據HTTP頭部對響應的編碼做出有根據的推測,推測的文本編碼?
如何修改編碼方式:response.encoding = 'gbk' -
response.content?
解碼類型:沒有指定?
如何修改編碼方式:response.content.decode('utf8')
6、【requests】請求方式:(測試的是阿里的手機地址查詢(免費的get接口),只返回gbk編碼的數據)
import requests #獲取請求的響應結果【response】 tel=int(input("請輸入手機號碼:\n")) url="https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={0}".format(tel) print(url) response=requests.get(url) print(response.text) print(response.content.decode("gbk"))個人推薦使用【聚合數據】做自己的測試用接口,免費的每天能用100次左右,夠你做測試了。有條件的可以使用自己的接口測試,我在【ASP.NET Core中詳細的介紹的創建使用上線步驟】
由于未找到post請求的免費api故而寫個例子做展示啊:
import requests data = {"name":"小龍女","age":16 } response = requests.post("http://httpbin.org/post",data=data) print(response.text)?
7、urllib.request與requests區別
通常而言,在我們使用python爬蟲時,更建議用requests庫,因為requests比urllib更為便捷,requests可以直接構造get,post請求并發起,而urllib.request只能先構造get,post請求,再發起。
8、總結:
a)、本章節主要為讓大家了解網絡請求的方式,這里主要是【get】與【post】請求,使用的是【requests】模塊。
b)、后續所有的訪問返回都會使用【requests】請大家好好練習一下這塊。
歡迎【點贊】、【評論】、【關注】、【收藏】、【打賞】,為推廣知識貢獻力量。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的零基础学Python-爬虫-1、网络请求Requests【网络操作理论基础与实践·请认真看看理论,理论基础决定后期高度】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零基础学Python(第二十二章 常用内
- 下一篇: 零基础学Python-爬虫-2、scra