Python爬蟲之requests使用

繼urllib請(qǐng)求庫后,python有了更為強(qiáng)大的請(qǐng)求庫 requests,有了它,Cookies、登錄驗(yàn)證、代理設(shè)置等操作變得非常簡(jiǎn)單,只需要一個(gè)個(gè)參數(shù)即可實(shí)現(xiàn)相應(yīng)的要求。
1、安裝環(huán)境
pip install requests
官方地址:http://docs.python-requests.org/zh_CN
2、實(shí)例引入
urllib 庫中的 urlopen 方法實(shí)際上是以 GET 方式請(qǐng)求網(wǎng)頁,而 requests 中相應(yīng)的方法就是 get 方法,是不是感覺表達(dá)更明確一些?下面通過實(shí)例來看一下:
測(cè)試實(shí)例:
3、GET抓取
3.1 抓取二進(jìn)制數(shù)據(jù)
下面以 圖片為例來看一下:
如果不傳遞 headers,就不能正常請(qǐng)求:
但如果加上 headers 并加上 User-Agent 信息,那就沒問題了:
4、POST請(qǐng)求
4.1 --前面我們了解了最基本的 GET 請(qǐng)求,另外一種比較常見的請(qǐng)求方式是 POST。使用 requests 實(shí)現(xiàn) POST 請(qǐng)求同樣非常簡(jiǎn)單,示例如下:
測(cè)試網(wǎng)站
巨潮網(wǎng)絡(luò)數(shù)據(jù) 點(diǎn)擊資訊選擇公開信息
4.2 --發(fā)送請(qǐng)求后,得到的自然就是響應(yīng)。在上面的實(shí)例中,我們使用 text 和 content 獲取了響應(yīng)的內(nèi)容。此外,還有很多屬性和方法可以用來獲取其他信息,比如狀態(tài)碼、響應(yīng)頭、Cookies 等。示例如下:
4.3 --狀態(tài)碼常用來判斷請(qǐng)求是否成功,而 requests 還提供了一個(gè)內(nèi)置的狀態(tài)碼查詢對(duì)象 requests.codes,示例如下:
4.4 --那么,肯定不能只有 ok 這個(gè)條件碼。下面列出了返回碼和相應(yīng)的查詢條件:
5、高級(jí)用法
5.1--代理添加
5.2--快代理IP使用
https://www.kuaidaili.com/doc/dev/quickstart/
打開后,默認(rèn)http協(xié)議,返回格式選json,我的訂單是VIP訂單,所以穩(wěn)定性選穩(wěn)定,返回格式選json,然后點(diǎn)擊生成鏈接,下面的API鏈接直接復(fù)制上。

5.3--關(guān)閉警告
爬蟲流程

6、初級(jí)爬蟲
7、全站采集
7.1--封裝公共文件
創(chuàng)建utils文件夾,寫一個(gè)base類供其他程序調(diào)用
7.2--案例實(shí)踐
文件操作標(biāo)識(shí)

8、requests-cache
pip install requests-cache
在做爬蟲的時(shí)候,我們往往可能這些情況:
網(wǎng)站比較復(fù)雜,會(huì)碰到很多重復(fù)請(qǐng)求。
有時(shí)候爬蟲意外中斷了,但我們沒有保存爬取狀態(tài),再次運(yùn)行就需要重新爬取。
測(cè)試樣例對(duì)比
測(cè)試樣例對(duì)比2
但是,剛才我們?cè)趯懙臅r(shí)候把 requests 的 session 對(duì)象直接替換了。有沒有別的寫法呢?比如我不影響當(dāng)前代碼,只在代碼前面加幾行初始化代碼就完成 requests-cache 的配置呢?
這次我們直接調(diào)用了 requests-cache 庫的 install_cache 方法就好了,其他的 requests 的 Session 照常使用即可。
剛才我們知道了,requests-cache 默認(rèn)使用了 SQLite 作為緩存對(duì)象,那這個(gè)能不能換???比如用文件,或者其他的數(shù)據(jù)庫呢?
自然是可以的。
比如我們可以把后端換成本地文件,那可以這么做:
如果不想生產(chǎn)文件,可以指定系統(tǒng)緩存文件
另外除了文件系統(tǒng),requests-cache 也支持其他的后端,比如 Redis、MongoDB、GridFS 甚至內(nèi)存,但也需要對(duì)應(yīng)的依賴庫支持
比如使用 Redis 就可以改寫如下:
更多詳細(xì)配置可以參考官方文檔:https://requests-cache.readthedocs.io/en/stable/user_guide/backends.html#backends
當(dāng)然,我們有時(shí)候也想指定有些請(qǐng)求不緩存,比如只緩存 POST 請(qǐng)求,不緩存 GET 請(qǐng)求,那可以這樣來配置:
當(dāng)然我們還可以匹配 URL,比如針對(duì)哪種 Pattern 的 URL 緩存多久,則可以這樣寫:
好了,到現(xiàn)在為止,一些基本配置、過期時(shí)間配置、后端配置、過濾器配置等基本常見的用法就介紹到這里啦,更多詳細(xì)的用法大家可以參考官方文檔:https://requests-cache.readthedocs.io/en/stable/user_guide.html