Python爬蟲(chóng)Requests庫(kù)的使用詳情
一、Requests庫(kù)的7個(gè)主要的方法
1.request() | 構(gòu)造請(qǐng)求,支撐以下的基礎(chǔ)方法 |
2.get() | 獲取HTML頁(yè)面的主要方法,對(duì)應(yīng)于http的get |
3.head() | 獲取HTML頁(yè)面的頭部信息的主要方法,對(duì)應(yīng)于http的head |
-? | |
4.post() | 向HTML提交post請(qǐng)求的方法,對(duì)應(yīng)于http的post |
-? | |
-? | |
5.put() | 向HTML提交put請(qǐng)求的方法,對(duì)應(yīng)于http的put |
6.patch() | 向HTML提交局部修改的請(qǐng)求,對(duì)應(yīng)于http的patch |
7.delete() | 向HTML提交刪除請(qǐng)求,對(duì)應(yīng)于http的delete |
以下代碼是描述的request方法中的13個(gè)控制訪問(wèn)參數(shù):
import requests
# **kwargs:控制訪問(wèn)的參數(shù),均為可選項(xiàng),不僅僅是針對(duì)request,其他六中方法依舊適用
# params:字典或字節(jié)序列,作為參數(shù)增加到URL中,可以通過(guò)該參數(shù)篩選數(shù)據(jù)
kv = {"key1":"value1","key2":"value2"}
r = requests.request('GET','http://python123.io/ws',params=kv)
print(r.url)
# https://python123.io//ws?key1=value1&key2=value2
# data:字典、字節(jié)序列或文件對(duì)象,作為Request的內(nèi)容;提交時(shí),作為數(shù)據(jù)內(nèi)容添加到當(dāng)前的連接下
kv = {"key1":"value1","key2":"value2"}
r = requests.request('POST','http://python123.io/ws',params=kv)
body = '主體內(nèi)容'
r = requests.request('POST','http://python123.io/ws',params=body)
# json:JSON格式的數(shù)據(jù),作為Request的內(nèi)容
kv = {"key1":"value1"}
r = requests.request('POST','http://python123.io/ws',json=kv)
# headers:字典,HTTP定制頭,模擬需要的瀏覽器來(lái)進(jìn)行訪問(wèn)
hd = {"user-agent":"Chrome/10"}
r = requests.request('POST','http://python123.io/ws',headers=hd)
# cookies:字典或CookieJar,Request中的cookie
# auth:元組,支持HTTP認(rèn)證功能
# files:字典類型,傳輸文件;將某個(gè)文件提交到連接上
fs = {"file":open('data.xls','rb')}
r = requests.request('POST','http://python123.io/ws',file=fs)
# timeout:設(shè)定超時(shí)時(shí)間,秒為單位;在規(guī)定的時(shí)間內(nèi)沒(méi)有接收到響應(yīng)將會(huì)顯示timeout異常
r = requests.request('POST','http://www.baidu.com',timeout=10)
# proxies:字典類型,設(shè)定訪問(wèn)代理服務(wù)器,可以增加登錄認(rèn)證
pxs = {'http':'http://user:pass@10.10.10.1:1234', #當(dāng)我們進(jìn)入HTTP協(xié)議的網(wǎng)站時(shí)增加登錄認(rèn)證
'https':'https://10.10.10.1.4321' } #當(dāng)我們進(jìn)入HTTPS協(xié)議的網(wǎng)站時(shí),直接使用代理服務(wù)器的IP地址;可以有效掩蓋爬蟲(chóng)的原IP地址
r = requests.request('GET','http://python123.io/ws',proxies=pxs)
# allow_redirects:True/False,默認(rèn)為T(mén)rue,重定向開(kāi)關(guān)
# stream:True/False,默認(rèn)為T(mén)rue,獲取內(nèi)容立刻下載的開(kāi)關(guān)
# verify:True/False,默認(rèn)為T(mén)rue,認(rèn)證SSL證書(shū)開(kāi)關(guān)
# cert:本地SSL證書(shū)路徑二、Response對(duì)象的屬性
status_code | HTTP請(qǐng)求的返回狀態(tài)碼,200表示成功,400表示失敗 |
text | HTTP響應(yīng)內(nèi)容的字符串形式,即URL對(duì)應(yīng)的頁(yè)面內(nèi)容 |
encoding | 從HTTPheader中猜測(cè)的響應(yīng)內(nèi)容編碼方式 |
-? | |
apparent_encoding | 從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式) |
-? | |
content | HTTP響應(yīng)內(nèi)容的二進(jìn)制形式 |
import requests
#構(gòu)造一個(gè)向服務(wù)器請(qǐng)求資源的Response對(duì)象
r = requests.get(url="http://www.baidu.com")
print(r.status_code) #打印請(qǐng)求狀態(tài)碼
#200
print(type(r)) #打印請(qǐng)求對(duì)象類型
#<class 'requests.models.Response'>
print(r.headers) #打印請(qǐng)求對(duì)象的頭部信息
#{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Sat, 27 Jun 2020 09:03:41 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:27:32 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}
print(r.text)
print(r.encoding) #ISO-8859-1
print(r.apparent_encoding) #備用編碼utf-8
r.encoding = "utf-8"
print(r.text)


直接解析會(huì)出現(xiàn)亂碼,將字符設(shè)為apparent_encoding時(shí)會(huì)結(jié)局問(wèn)題。

三、爬取網(wǎng)頁(yè)通用代碼
try: r = requests.get(url,timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "產(chǎn)生異常!"
作用:??r.raise_for_status()函數(shù)??判斷當(dāng)前請(qǐng)求返回狀態(tài)碼,當(dāng)返回狀態(tài)碼不為200時(shí),產(chǎn)生異常并能夠被except捕獲
import requests # (定義方法)封裝函數(shù) def getHTMLText(url): try: r = requests.get(url,timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "代碼錯(cuò)誤,產(chǎn)生異常!" if __name__ =="__main__": url = "http://www.baidu.com" print(getHTMLText(url)) #正常顯示爬取的頁(yè)面信息 if __name__ =="__main__": url = "www.baidu.com" #缺失了 print(getHTMLText(url)) #代碼錯(cuò)誤,產(chǎn)生異常!

四、Resquests庫(kù)的常見(jiàn)異常
requests.ConnectionError | 網(wǎng)絡(luò)連接錯(cuò)誤異常,如DNS查詢失敗、拒絕連接等 |
requests.HTTPError | HTTP錯(cuò)誤異常 |
requests.URLRequired | URL缺失異常 |
requests.TooManyRedirects | 超過(guò)最大重定向次數(shù),產(chǎn)生重定向異常 |
requests.ConnectTimeout | 連接遠(yuǎn)程服務(wù)器超時(shí)異常 |
requests.Timeout | 請(qǐng)求URL超時(shí),產(chǎn)生超時(shí)異常 |
五、Robots協(xié)議展示
import requests # (定義方法)封裝函數(shù) def getHTMLText(url): try: r = requests.get(url,timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "代碼錯(cuò)誤,產(chǎn)生異常!" if __name__ =="__main__": url = "http://www.baidu.com/robots.txt" print(getHTMLText(url)) #正常顯示爬取的頁(yè)面信息,顯示出robots協(xié)議對(duì)于不同類型爬蟲(chóng)的限制

六、案例展示
1.爬取京東商品信息


在爬取后,我們發(fā)現(xiàn)在控制臺(tái)中返回了帶有??login???的一個(gè)href,并沒(méi)有具體的信息內(nèi)容。但是在爬取主頁(yè)時(shí),可以直接獲取主頁(yè)具體信息。個(gè)人認(rèn)為是由于無(wú)法識(shí)別是否已經(jīng)登陸而導(dǎo)致的,后續(xù)學(xué)習(xí)中會(huì)跟進(jìn)知識(shí)點(diǎn)及解決方法。(若有大佬會(huì)的,感謝評(píng)論?。?/strong>


2.爬取網(wǎng)上圖片并保存

import requests
import os
url = "http://image.ngchina.com.cn/2019/0523/20190523103156143.jpg"
root = "F:/圖片/" #根目錄
path = root + url.split('/')[-1] #以最后一個(gè)/后的文字命名
try:
if not os.path.exists(root): #如果不存在根目錄文件,則創(chuàng)建根目錄文件夾
os.mkdir(root) #該方法只能創(chuàng)建一級(jí)目錄,如要?jiǎng)?chuàng)建多層,可以遍歷循環(huán)創(chuàng)建
if not os.path.exists(path):
r = requests.get(url)
with open(path,'wb') as f:
f.write(r.content) #r.content返回的是2進(jìn)制編碼,將其寫(xiě)入
f.close()
print("文件已成功保存!")
else:
print("文件已存在~")
except:
print("爬取失?。。。?)
到此這篇關(guān)于Python爬蟲(chóng)Requests庫(kù)的使用詳情的文章就介紹到這了,更多相關(guān)Python Requests庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談numpy.where() 的用法和np.argsort()的用法說(shuō)明
這篇文章主要介紹了淺談numpy.where() 的用法和np.argsort()的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05
python 實(shí)現(xiàn)return返回多個(gè)值
今天小編就為大家分享一篇python 實(shí)現(xiàn)return返回多個(gè)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Pandas數(shù)據(jù)查詢的集中實(shí)現(xiàn)方法
本文主要介紹了Pandas數(shù)據(jù)查詢的集中實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
python 殺死自身進(jìn)程的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python 殺死自身進(jìn)程的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
python用pdfplumber提取pdf表格數(shù)據(jù)并保存到excel文件中
在實(shí)際研究中我們經(jīng)常需要獲取大量數(shù)據(jù),而這些數(shù)據(jù)很大一部分以pdf表格的形式呈現(xiàn),如公司年報(bào)、發(fā)行上市公告等,下面這篇文章主要給大家介紹了關(guān)于利用python提取pdf表格數(shù)據(jù)并保存到excel文件中的相關(guān)資料,需要的朋友可以參考下2022-07-07
Pycharm搭建Django項(xiàng)目詳細(xì)教程(看完這一篇就夠了)
這篇文章主要給大家介紹了關(guān)于Pycharm搭建Django項(xiàng)目的詳細(xì)教程,想要學(xué)習(xí)的小伙伴看完這一篇就夠了,pycharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,需要的朋友可以參考下2023-11-11
python找出一個(gè)列表中相同元素的多個(gè)索引實(shí)例
今天小編就為大家分享一篇python找出一個(gè)列表中相同元素的多個(gè)索引實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06

