最近在學爬蟲時發現許多網站都有自己的反爬蟲機制,這讓我們沒法直接對想要的數據進行爬取,于是了解這種反爬蟲機制就會幫助我們找到解決方法。
常見的反爬蟲機制有判別身份和IP限制兩種,下面我們將一一來進行介紹。
(一) 判別身份
首先我們看一個例子,看看到底什么時反爬蟲。
我們還是以 豆瓣電影榜top250(https://movie.douban.com/top250) 為例。`
import requests# 豆瓣電影榜top250的網址url = 'https://movie.douban.com/top250'# 請求與網站的連接res = requests.get(url)# 打印獲取的文本print(res.text)
這是段簡單的請求與網站連接并打印獲取數據的代碼,我們來看看它的運行結果。
我們可以發現我們什么數據都沒有獲取到,這就是由于這個網站有它的身份識別功能,把我們識別為了爬蟲,拒絕為我們提供數據。不管是瀏覽器還是爬蟲訪問網站時都會帶上一些信息用于身份識別。而這些信息都被存儲在一個叫請求頭(request headers) 的地方。而這個請求頭中我們只需要了解其中的一個叫user-agent(用戶代理) 的就可以了。user-agent里包含了操作系統、瀏覽器類型、版本等信息,通過修改它我們就能成功地偽裝成瀏覽器。
下面我們來看怎么找這個user-agent吧。
首先得打開瀏覽器,隨便打開一個網站,再打開開發者工具。
再點擊network標簽,接著點第一個請求,再找到Request Headers,最后找到user-agent字段。(有時候可能點擊network標簽后是空白得,這時候刷新下網頁就好啦!)
找到請求頭后,我們只需要把他放進一個字典里就好啦,具體操作見下面代碼。
import requests# 復制剛才獲取得請求頭headers = { 'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}# 豆瓣電影榜top250的網址url = 'https://movie.douban.com/top250'# 請求與網站的連接res = requests.get(url, headers=headers)# 打印獲取的文本print(res.text)
現在我們再來看部分輸出結果。
我們可以發現已經將該網站的HTML文件全部爬取到了,至此第一種方法就將完成了。下面我們來看第二種方法。
(二) IP限制
IP(Internet Protocol) 全稱互聯網協議地址,意思是分配給用戶上網使用的網際協議的設備的數字標簽。它就像我們身份證號一樣,只要知道你的身份證號就能查出你是哪個人。
新聞熱點
疑難解答