Python爬蟲(二)——傳送請求

含若飛發表於2021-08-27

1. requests庫介紹

​ 在python中有許多支援傳送的庫。比如:urlib、requests、selenium、aiohttp……等。但我們當前最常用的還是requests庫,這個庫是基於urllib寫的,語法非常簡單,操作起來十分方便。下面我們就直接進入主題,簡單介紹一下如何使用requests庫。

2. requests安裝及使用

2.1 安裝

使用簡單易操作的pip的安裝方式就可以了:

pip install requests

2.2 傳送請求

​ 下面先列舉一個最簡單的get請求:

import requests
 
response = requests.get(url='http://zx529.xyz')    # 最基本的GET請求
print(response.text)   #列印返回的html文件

​ 通過上面這段程式碼我們就可以初步獲得想要請求的網站的網頁原始碼了。但是大多數情況都會存在著一些反爬手段,這時候我們就需要對requests中的引數進行一些新增,比如Headers、cookies、refer……等。對於大部分網站,通過新增所需要的請求引數就能夠對網站傳送請求,並得到期望的響應。對於常見的請求,使用requests都可以得到解決,比如:

requests.get('https://github.com/timeline.json') #GET請求
requests.post('http://httpbin.org/post') #POST請求
requests.put('http://httpbin.org/put') #PUT請求
requests.delete('http://httpbin.org/delete') #DELETE請求
requests.head('http://httpbin.org/get') #HEAD請求
requests.options('http://httpbin.org/get') #OPTIONS請求

​ 而請求型別我們也可以在控制皮膚中進行檢視,按下 f12 或者滑鼠右擊檢查,隨便開啟一個資料包就可以檢視該資料包的請求方式,如果沒有資料包的話重新整理一下頁面就可以了。

​ 這就是最簡單的傳送get請求,也就是當要請求的網站沒有任何的反扒手段時,只需要在get方法內新增url地址就可以了。但是許多網站存在著一些簡單的反爬,就需要新增一些相應的引數。下面列舉一些請求的引數:

method :請求方法get posturl:請求網址
params: (可選的)查詢引數
headers:(可選的)字典請求頭
cookies:(可選的)字典.cookiejar物件,使用者身份資訊proxies: (可選的) ip代理
data:(可選的)字典.列表.元組.bytespost請求時會用到json:(可選的)字典提交引數
verify:(可選的)是否驗證證照,ca證照
timeout:(可選的)設定響應時間,一旦超過,程式會報錯
a7low_redirects:(可選的)是否允許重定向,布林型別資料

以上的引數按照出現的頻率排序,當我們對網站進行請求時如果不能夠正確出現預期的響應時就可以新增這些引數,最常用的是Headers、refer、cookies。一般情況下如果不用新增cookies就可以的話儘量不要新增cookies,因為cookies可能包含著我們的個人資料。

2.3 個人經驗

我總結一下我個人進行爬蟲的一些準備。

  1. 先檢視所要獲取的資料是否在網頁原始碼中,如果在網頁原始碼中,那隻要獲得網頁原始碼,那我們直接獲取網頁原始碼就可以了;如果不在網頁原始碼中,我們就要開啟控制皮膚,對資料包進行抓取,從資料包中獲取資料。根據我個人經驗,如果網頁是一個靜態網頁,而且想要獲得的資料很少發生變化,那麼所要獲得的資料很大可能就在網頁原始碼中,比如一些常見的圖片網站等;如果想要請求的資料會經常更新,那麼資料很有可能是以資料包的形式傳送過來的,比如我們一些新聞網、天氣網站等。當然這只是大部分情況,具體的情況還要具體分析。再下一步就是確定它的請求方式,以便於我們請求的傳送。
  2. 傳送請求之後,具體資料以控制檯列印的為準,因為控制檯列印的才是我們能夠直接進行操作的。而網頁有一些結構在經過前端的各種渲染之後就與我們所獲得的網頁原始碼有一定的出入,因此在進行資料篩選之前都以我們控制檯獲取到的資料為準。
  3. 請求引數方面如果不能獲取到就嘗試新增一些引數。先新增headers,refer,如果實在不行再新增cookies。對於get請求,url中的請求引數我們還可以以字典的形式放到params對應的引數中。而對於post請求,對應的請求資料則會以字典的形式放到data引數中。

下面我們對飛盧小說網站的內容進行獲取,網頁地址:

import requests

url='https://b.faloo.com/y_0_0_0_0_3_15_1.html'
response=requests.get(url).text
print(response)

通過控制檯列印的內容,此時我們可以複製一段網頁中的內容,然後到控制檯中按下 Ctrl+F 進行查詢,比如我複製了一本小說的名字,在控制檯可以獲取到,那麼就說明我們獲取到了期望的內容。

可以獲取到相關的內容,說明資料已經被我們獲取到了,下一次會給大家整理資料篩選相關的知識。關於requests庫的相關知識大家可以參考相關文件:

中文文件: http://docs.python-requests.org/zh CN/latest/index.html

github地址: https://github.com/requests/requests

相關文章