用Python爬蟲抓取代理IP

犀牛小牛發表於2019-04-17

不知道大家在訪問網站的時候有沒有遇到過這樣的狀況就是被訪問的網站會給出一個提示,提示的顯示是“訪問頻率太高”,如果在想進行訪問那麼必須要等一會或者是對方會給出一個驗證碼使用驗證碼對被訪問的網站進行解封。之所以會有這樣的提示是因為我們所要爬取或者訪問的網站設定了反爬蟲機制,比如使用同一個IP頻繁的請求網頁的次數過多的時候,伺服器由於反爬蟲機制的指令從而選擇拒絕服務,這種情況單單依靠解封是比較難處理的,所以一個解決的方法就是偽裝本機的IP地址去訪問或者爬取網頁,也就是我們今天所有跟大家所說的代理IP

text

目前網上有許多代理ip,有免費的也有付費的。免費的雖然不用花錢但有效的代理很少且不穩定,付費的可能會好一點  下面講一下代理IP的試用,將可用ip存入MongoDB,方便下次取出。

執行平臺:Windows

Python版本:Python3.6

IDE: Sublime Text

其他:Chrome瀏覽器

簡述流程為:

步驟1:瞭解requests代理如何使用

步驟2:從代理網頁爬取到ip和埠

步驟3:檢測爬取到的ip是否可用

步驟4:將爬取的可用代理存入MongoDB

步驟5:從存入可用ip的資料庫裡隨機抽取一個ip,測試成功後返回

對於requests來說,代理的設定比較簡單,只需要傳入proxies引數即可。

不過需要注意的是,這裡我是在本機安裝了抓包工具Fiddler,並用它在本地埠8888建立了一個HTTP代理服務(用Chrome外掛SwitchyOmega),即代理服務為:127.0.0.1:8888,我們只要設定好這個代理,就可以成功將本機ip切換成代理軟體連線的伺服器ip了。

用Python爬蟲抓取代理IP

這裡我是用來作為測試網站,我們訪問該網頁可以得到請求的有關資訊,其中origin欄位就是客戶端ip,我們可以根據返回的結果判斷代理是否成功。返回結果如下:

接下來我們便開始爬取代理IP,首先我們開啟Chrome瀏覽器檢視網頁,並找到ip和埠元素的資訊。

用Python爬蟲抓取代理IP

可以看到,代理IP以表格儲存ip地址及其相關資訊,所以我們用BeautifulSoup提取時很方便便能提取出相關資訊,但是我們需要注意的是,爬取的ip很有可能出現重複的現象,尤其是我們同時爬取多個代理網頁又儲存到同一陣列中時,所以我們可以使用集合來去除重複的ip。

用Python爬蟲抓取代理IP

將要爬取頁數的ip爬取好後存入陣列,然後再對其中的ip逐一測試。

用Python爬蟲抓取代理IP

這裡就用到了上面提到的requests設定代理的方法,我們使用作為測試網站,它可以直接返回我們的ip地址,測試透過後再存入MomgoDB資料庫。

用Python爬蟲抓取代理IP

連線資料庫然後指定資料庫和集合,再將資料插入就OK了。

用Python爬蟲抓取代理IP

最後執行檢視一下結果吧

用Python爬蟲抓取代理IP

執行了一段時間後,難得看到一連三個測試透過,趕緊截圖儲存一下,事實上是,畢竟是免費代理IP,有效的還是很少的,並且存活時間確實很短,不過,爬取的量大,還是能找到可用的,我們只是用作練習的話,還是勉強夠用的。現在看看資料庫裡儲存的吧。

用Python爬蟲抓取代理IP

因為爬取的頁數不多,加上有效ip也少,再加上我沒怎麼爬,所以現在資料庫裡的ip並不多,不過也算是將這些ip給存了下來。現在就來看看怎麼隨機取出來吧。

用Python爬蟲抓取代理IP

由於擔心放入資料庫一段時間後ip會失效,所以取出前我重新進行了一次測試,如果成功再返回ip,不成功的話就直接將其移出資料庫。

這樣我們需要使用代理的時候,就能透過資料庫隨時取出來了。

總的程式碼如下:

zhihu.com/people/hdmi-blog


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555707/viewspace-2641679/,如需轉載,請註明出處,否則將追究法律責任。

相關文章