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 個人經驗
我總結一下我個人進行爬蟲的一些准備。
- 先查看所要獲取的數據是否在網頁源代碼中,如果在網頁源代碼中,那只要獲得網頁源代碼,那我們直接獲取網頁源代碼就可以了;如果不在網頁源代碼中,我們就要打開控制面板,對數據包進行抓取,從數據包中獲取數據。根據我個人經驗,如果網頁是一個靜態網頁,而且想要獲得的數據很少發生變化,那么所要獲得的數據很大可能就在網頁源代碼中,比如一些常見的圖片網站等;如果想要請求的數據會經常更新,那么數據很有可能是以數據包的形式發送過來的,比如我們一些新聞網、天氣網站等。當然這只是大部分情況,具體的情況還要具體分析。再下一步就是確定它的請求方式,以便於我們請求的發送。
- 發送請求之后,具體數據以控制台打印的為准,因為控制台打印的才是我們能夠直接進行操作的。而網頁有一些結構在經過前端的各種渲染之后就與我們所獲得的網頁源代碼有一定的出入,因此在進行數據篩選之前都以我們控制台獲取到的數據為准。
- 請求參數方面如果不能獲取到就嘗試添加一些參數。先添加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