代理IP或者分布式爬蟲:
如果對頁的爬蟲的效率有要求,那就不能通過設(shè)定訪問時(shí)間間隔的方法來繞過頻率檢查了。
代理IP訪問可以解決這個(gè)問題。如果用100個(gè)代理IP訪問100個(gè)頁面,可以給網(wǎng)站造成一種有100個(gè)人,每個(gè)人訪問了1頁的錯(cuò)覺。這樣自然而然就不會限制你的訪問了。
代理IP經(jīng)常會出現(xiàn)不穩(wěn)定的情況。你隨便搜一個(gè)“免費(fèi)代理”,會出現(xiàn)很多網(wǎng)站,每個(gè)網(wǎng)站也會給你很多的代理IP,但實(shí)際上,真正可用的代理IP并不多。你需要維護(hù)一個(gè)可用的代理IP池,但是一個(gè)免費(fèi)的代理IP,也許在你測試的時(shí)候是可以使用的,但是幾分鐘以后就失效了。使用免費(fèi)代理IP是已經(jīng)費(fèi)時(shí)費(fèi)力,而且很考驗(yàn)?zāi)氵\(yùn)氣的事情。
大家可以使用http://icanhazip.com/這個(gè)網(wǎng)站來檢測你的代理IP是否設(shè)定成功。當(dāng)你直接使用瀏覽器訪問這個(gè)網(wǎng)站的時(shí)候,它會返回你的IP地址。如下圖所示:

通過requests,我們可以設(shè)置代理訪問網(wǎng)站,在requests的get方法中,有一個(gè)proxies參數(shù),它接收的數(shù)據(jù)是一個(gè)字典,在這個(gè)字典中我們可以設(shè)置代理。
importrequestsproxies = {"http":"http://10.10.1.10:3128",#HTTP類型的代理"https":"http://10.10.1.10:1080"}#HTTPS類型的代理requests.get("http://example.org", proxies=proxies)
大家可以在requests的官方中文文檔中看到關(guān)于設(shè)置代理的更多信息:http://docs.python-requests.org/zh_CN/latest/user/advanced.html#proxies
我在網(wǎng)上找了一些代理IP,如下圖所示:

以上代理在我寫這篇文檔的時(shí)候經(jīng)過測試是可以使用的,但是各位同學(xué)在看這篇文檔的時(shí)候,他們可能已經(jīng)失效了。
我選擇第一個(gè)HTTP類型的代理來給大家做測試,運(yùn)行效果如下圖所示:

從上圖可以看出,我們成功通過了代理IP來訪問網(wǎng)站。
我們還可以使用分布式爬蟲。分布式爬蟲會部署在多臺服務(wù)器上,每個(gè)服務(wù)器上的爬蟲統(tǒng)一從一個(gè)地方拿網(wǎng)址。這樣平均下來每個(gè)服務(wù)器訪問網(wǎng)站的頻率也就降低了。由于服務(wù)器是掌握在我們手上的,因此實(shí)現(xiàn)的爬蟲會更加的穩(wěn)定和高效。這也是我們這個(gè)課程最后要實(shí)現(xiàn)的目標(biāo)。