爬虫requests高阶篇详细教程
文章目錄
一、前言
二、SSL驗證
三、代理設置
四、超時設置
? ? ? ??? 五、身份認證
1)基本身份認證
2)摘要式身份認證
?六、總結
一、前言
本篇文高階篇,上一篇為基礎篇,希望你一定要學完基礎再來看高階篇內容
基礎篇文章可以看大佬寫的這篇:requests基礎篇
二、SSL驗證
我們已12306網站為例子進行講解。
首先我們請求一下12306:
運行結果:? ?返回:200:
在這里居然能返回200,按道理是應該失敗的,如果你有報錯SSLError,表示證書驗證錯誤,把 verify 參數設置為 False 即可:
運行結果:
可以看到報錯有個警告,讓我們添加證書,我們可以通過設置忽略警告的方式來屏蔽這個警告
import requests from requests.packages import urllib3urllib3.disable_warnings() response = requests.get('https://www.12306.cn', verify=False) print(response.status_code)運行結果:
或者通過捕獲警告到日志的方式忽略警告:
運行:
三、代理設置
對于某些網站,在測試的時候請求幾次,能正常獲取內容。但是一旦開始大規模爬取,對于大規模且頻繁的請求,網站可能會彈出驗證碼,或者跳轉到登錄認證頁面,更甚者可能會直接封禁客戶端的 IP,導致一定時間段內無法訪問。
那么,為了防止這種情況發生,我們需要設置代理來解決這個問題,這就需要用到 proxies 參數。可以用這樣的方式設置:
當然,直接運行這個實例可能不行,因為這個代理可能是無效的,請換成自己的有效代理試驗一下(自己買)
若代理需要使用 HTTP Basic Auth,也可以這樣寫:
除了基本的 HTTP 代理外,requests 還支持 SOCKS 協議的代理。
首先,需要安裝 socks 這個庫:
安裝成功如下:
然后就可以使用 SOCKS 協議代理了,示例如下:
運行:
你是不是想說我又在發無用代碼,都是不可以用的?你要把我上面的ip換成有用的ip,你就可以成功了,為了避免被xx我就不演示了。
四、超時設置
在本機網絡狀況不好或者服務器網絡響應太慢甚至無響應時,我們可能會等待特別久的時間才可能收到響應,甚至到最后收不到響應而報錯。為了防止服務器不能及時響應,應該設置一個超時時間,即超過了這個時間還沒有得到響應,那就報錯。這需要用到 timeout 參數。這個時間的計算是發出請求到服務器返回響應的時間。示例如下:
import requestsr = requests.get('https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343&type=blog', timeout=1) print(r.status_code)運行結果:
通過這樣的方式,我們可以將超時時間設置為 1 秒,如果 1 秒內沒有響應,那就拋出異常。
實際上,請求分為兩個階段,即連接(connect)和讀取(read)。上面設置的 timeout 將用作連接和讀取這二者的 timeout 總和。如果要分別指定,就可以傳入一個元組:
運行結果:
如果想永久等待,可以直接將 timeout 設置為 None,或者不設置直接留空,因為默認是 None。這樣的話,如果服務器還在運行,但是響應特別慢,那就慢慢等吧,它永遠不會返回超時錯誤的。其用法如下:?
或直接不加參數:
import requestsr = requests.get('https://blog.csdn.net/weixin_46211269?spm=1000.2115.3001.5343&type=blog') print(r.status_code)運行結果:
五、身份認證
為什么認證?比如這個網址:點擊打開
身份驗證基本格式為:?
運行結果:
1)基本身份認證
此時可以使用 requests 自帶的身份認證功能:
import requests from requests.auth import HTTPBasicAuth r = requests.get('https://static3.scrape.cuiqingcai.com/', auth=HTTPBasicAuth('admin', 'admin')) print(r.status_code)這樣運行可還是會報錯:這就是我們前面說到的SSL驗證
因此我們加上SSL驗證為:?
運行結果:? 返回401 認證失敗
這個示例網站的用戶名和密碼都是 admin,在這里我們可以直接設置。
import requests from requests.auth import HTTPBasicAuth r = requests.get('https://static3.scrape.cuiqingcai.com/', auth=HTTPBasicAuth('admin', 'admin'),verify=False) print(r.status_code)運行結果:
如果用戶名和密碼正確的話,請求時會自動認證成功,返回 200 狀態碼;如果認證失敗,則返回 401 狀態碼。
上面的代碼可以直接簡寫如下:?
運行結果:
2)摘要式身份認證
另一種非常流行的HTTP身份認證形式是摘要式身份認證Digest Authentication,Requests 對它的支持也是開箱即可用的:
import requests from requests.auth import HTTPDigestAuth url = 'http://httpbin.org/digest-auth/auth/user/pass' requests.get(url, auth=HTTPDigestAuth('user', 'pass'))運行:?
六、總結
上一篇我們已經學會了基礎篇教程,本篇是對上一篇內容的補充豐富,希望大家能和我一樣通過跟隨大佬打卡,不斷進步不斷成長。若本篇有不當之處,請大家多多指正!!!
總結
以上是生活随笔為你收集整理的爬虫requests高阶篇详细教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度linux安装好上不了网,Deepi
- 下一篇: java source folder作用