通過(guò)用戶代理我們可以將普通的爬蟲程序偽裝成瀏覽器,,而IP代理的作用則是用于突破目標(biāo)服務(wù)器對(duì)同一IP訪問(wèn)頻率的限制,。 在網(wǎng)站的反爬蟲策略中,,限制IP訪問(wèn)頻率是比較常見的措施,。具體體現(xiàn)為,,當(dāng)我們的爬蟲程序短時(shí)間內(nèi)對(duì)服務(wù)器發(fā)起大量請(qǐng)求時(shí),,會(huì)出現(xiàn)訪問(wèn)限制或者IP被封禁的現(xiàn)象,,此時(shí)無(wú)論是爬蟲程序,,還是通過(guò)瀏覽器訪問(wèn),,都無(wú)法訪問(wèn)到目標(biāo)服務(wù)器。 為了突破這一限制,,可以使用IP代理,。IP是互聯(lián)網(wǎng)中的門牌號(hào),IP代理的作用就是將我們的爬蟲程序偽裝成不同的用戶,,這樣就避免了對(duì)同一個(gè)用戶訪問(wèn)頻率的限制,。在python中,通過(guò)urllib和requests這兩個(gè)模塊都實(shí)現(xiàn)IP代理,。 1. urllib 代碼如下 >>> proxy="http://119.8.44.244:8080" 2. requests 代碼如下 >>> import requests 上述代碼中的目標(biāo)網(wǎng)站是一個(gè)檢測(cè)IP的網(wǎng)站,,當(dāng)我們成功訪問(wèn)后,會(huì)顯示對(duì)應(yīng)的IP地址,,從而幫助我們判斷代理IP是否生效,。 可以看到,相對(duì)于urllib,,requests模塊的代理IP使用起來(lái)更加簡(jiǎn)單,。 在實(shí)際應(yīng)用中,既有免費(fèi)的代理IP,也有收費(fèi)的代理IP,。免費(fèi)的代理IP需要我們從對(duì)應(yīng)的網(wǎng)站上爬取IP列表,,然后還需要自己檢測(cè)代理IP的有效性,而通常情況下,,免費(fèi)的代理IP有效性都很低,,所以更推薦使用收費(fèi)的代理IP。 收費(fèi)的代理IP會(huì)提供一個(gè)API借口,,可以方便的嵌入程序中,,通過(guò)API調(diào)用直接返回一系列可用的代理IP。 通過(guò)一個(gè)例子來(lái)看下代理IP的使用,,代碼如下 import requests 程序的作用是抓取KEGG Orthology的各個(gè)網(wǎng)頁(yè),,通過(guò)多線程實(shí)現(xiàn)抓取,通過(guò)代理IP的使用,,可以突破IP頻率的限制,。 需要注意,,代理IP是有時(shí)效性的,代碼中的IP是我在網(wǎng)上找到的免費(fèi)代理IP, 當(dāng)前測(cè)試是沒問(wèn)題的,,但是過(guò)段時(shí)間代理IP失效之后,,就沒法成功運(yùn)行了。 上述的代碼只是用于啟發(fā)式的思考,,在實(shí)際使用中,,用收費(fèi)代理的API來(lái)實(shí)現(xiàn)get_proxy函數(shù)即可。 |
|
來(lái)自: 生信修煉手冊(cè) > 《待分類》