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