天天看點

python爬蟲子產品request_爬蟲子產品篇【requests】

爬蟲說白了就是模拟發送網絡請求擷取資料。在python裡,requests可以很好地幫助我們完成這個過程。

本篇隻講怎麼擷取資料、控制台輸出資料和儲存資料。至于提取和解析資料在以後的篇目中會講到。

python爬蟲子產品request_爬蟲子產品篇【requests】

一、安裝

方法1:cmd輸入“pip install requests”

方法2:pycharm配置解釋器的位置輸入“requests”,再點選右下角的install package

注意事項:1.指定版本安裝格式:“pip install requests==X.X.X”。(預設安裝最新版本)

2.如果下載下傳速度慢或者報連接配接逾時錯誤,可嘗試用鏡像源下載下傳。例如使用豆瓣鏡像源: “pip install -i https://pypi.douban.com/simple requests”。

python爬蟲子產品request_爬蟲子產品篇【requests】

二、需要知道的一些内容

1.最常用到兩種網絡請求方式:GET和POST。在python裡相對應的用法是“requests.get()”和“requests.post()”。

2.GET方法查詢字元串(名稱/值對)是在 GET 請求的 URL 中發送的,而POST方法查詢字元串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發送的。

3.在浏覽器開發者工具的network裡能直接展現出兩者不同的内容:GET請求一般含有“Query String Parametrs”,POST請求含有“form data”或“Payload”

python爬蟲子產品request_爬蟲子產品篇【requests】

三、requests庫的常用參數。

1.url。為我們需要請求的連接配接,為必填參數。用法示例:requests.get(url)或requests.get(url=url)。(GET、POST均适用)

2.headers。為我們發送請求的請求頭,不是必填參數,但是一般網站都會有關于請求頭的反爬,是以一般還是需要加上的。用法示例:requests.get(headers=headers)。(GET、POST均适用)

3.proxies。我們通過這個參數添加ip代理,不是必填參數,但是當我們大批量爬取的時候,一些網站會把我們識别出來,将我們的ip封掉,對此我們使用這個方法保證程式的運作。(GET、POST均适用)

4.cookies。歸根結底用于身份驗證。

5.params。用于GET請求内容的傳遞。我們一般不使用這個參數,因為我們可以直接把這部分内容添加到url裡。

6.data。用于POST請求的表單傳遞。一般為POST的必填參數。在network内檢視content-type的對應值(一般為application/x-www-form-urlencoded 或 multipart/form-data),方可确定我們傳遞内容的具體形式。

7.json。用于POST請求的表單傳遞。一般為POST的必填參數。一般在表單為“Payload”類型時使用較多。和data的差別是,通過json的方式傳遞的任何類型,都會被轉化成“json”資料類型。(在python叫字元串,在前端叫json)

8.timeout。用于設定請求逾時的時間,機關為秒。如果在指定時間裡仍沒有與伺服器連接配接成功,将會報逾時錯誤,與異常搭配使用。

9.verify。通路某些網站會出現ssl錯誤,添加“verify=False”即可解決,可能添加後再次運作會報紅字警告。如果想讓這些不再顯示,隻需在程式最前加上“requests.packages.urllib3.disable_warnings()”

10.allow_redirects。重定向,預設為“True”。一般不需要添加改動。我一般用python分析api接口的時候才會使用這個參數。(我們大多數情況下直接在浏覽器f12裡分析就足夠了)

11.requests.session()。維持回話狀态,隻需建立session類,其餘和其他内容一樣。(requests.session()和requests.Session()本質上是一樣的,不了解的可以看他的源碼)

python爬蟲子產品request_爬蟲子產品篇【requests】

四、所得資料的常用處理方法。

1.控制台輸出。“response.text”或“response.content.decode('文字編碼類型')”。(第一種有可能出現亂碼,兩種方法都可以指定解碼方式,但第二種實際用起來更友善,是以優先推薦第二種)

2.把請求得到的文字、圖檔、音視訊儲存至本地。首先使用“response.content”獲得二進制對象,然後“with open('你的檔案名.要儲存的格式','wb')as f”儲存即可。

3.文字另一種儲存本地的方法。首先“response.content.decode('文字編碼類型')”。然後然後“with open('你的檔案名.要儲存的格式','w')as f”儲存即可。

4.“json”資料。在python裡叫做字元串的資料,一般直接“response.json()”即可。注意事項在以後的解析篇再詳細說明。

python爬蟲子產品request_爬蟲子產品篇【requests】

五、可能存在的疑問

1.有沒有别的請求類型? 答:有。一共有8種。除了GET和POST,還有OPTIONS、HEAD、PUT、DELETE、TRACE和CONNECT。

2.GET是不是要比POST簡單? 答:不是。難在破解,請求方式單對我們來說無所謂。

3.這些夠用嗎,我想把所有的先學完再開始實戰。 答:絕對夠用,沒必要先學完。既然踏上了程式設計這條船,那就要明白一件事,我們不可能把所有都學會。隻要夠用,在學有餘力的情況下再豐富自己就可以了

4.最難的爬蟲是什麼樣的? 答:與其說難得什麼樣,不如說哪些難破解。比如極客滑動驗證碼,反debug,js混淆,js自定義加密等等。(我也隻能破破簡單的)

5.内容太多了,頭暈,怎麼才能快速掌握這些内容? 答:實操。我給了大家很多的示例,目的就是這個,大家可以找些自己感興趣網站按着我的示例寫爬蟲。

6.很多加密的參數都是通過JavaScript生成的,有沒有必要先學JavaScript? 答:從我初學到現在來看,個人覺得沒必要從頭看到尾,簡單了解下原生JavaScript、jQuery架構和require架構就可以了。

7.我現在破解不了,甚至以後也破解不了JavaScript該怎麼辦? 答:學selenium和pyppeteer。這兩個會在以後的篇章裡說到。這兩個基本按道理可以爬取到所有内容。隻是有很多缺點,擷取資料速度難最為緻命。

python爬蟲子產品request_爬蟲子產品篇【requests】

六、請求示例

每次複制User-Agent太麻煩,下例均用useragentxxc庫生成随機請求頭。

源碼位址:https://github.com/clearDreamXXC/python_teach/blob/master/requests%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B.py

python爬蟲子產品request_爬蟲子產品篇【requests】

示例中需要的子產品

1.最基本的請求。(我們在“三”裡說了,絕大多數連結都有請求頭的檢驗。我們把headers當成必填參數就可以了,一般填入“Referer”和“User-Agent”即可)

python爬蟲子產品request_爬蟲子產品篇【requests】

堆糖網

2.post請求需要添加表單的示例。(content-type的不同取值對我們傳遞的表單格式會有不同要求。同時把這一鍵值對添加到headers裡,這裡不多解釋,大家就直接加上以防萬一)

python爬蟲子產品request_爬蟲子產品篇【requests】

哔哩哔哩

3.需要設定請求逾時的請求。(與異常搭配)

python爬蟲子產品request_爬蟲子產品篇【requests】

steam模拟登陸

4.需要代理的請求。(http代理和https代理使用效果上是沒有差別的)

python爬蟲子產品request_爬蟲子產品篇【requests】

蘿蔔研投網

5.需要cookie的請求。(兩種方式,第二種更常用:1.以字典形式加到參數cookies的位置。2.以字元串形式添加到headers裡。)

python爬蟲子產品request_爬蟲子產品篇【requests】

12306官網

6.控制台輸出請求到的資料。(使用print)

python爬蟲子產品request_爬蟲子產品篇【requests】

結合print

7.儲存音頻、視訊、圖檔和文字的簡單示例。

python爬蟲子產品request_爬蟲子產品篇【requests】

抖音短視訊

8.比較難的,各類參數都需要的請求。(在這裡隻列舉難的但也不是很難的)

python爬蟲子產品request_爬蟲子產品篇【requests】

攜程國際-港澳台機票