天天看點

手把手教你用免費代理ip爬資料

/1 前言/

玩爬蟲的都避免不了各大網站的反爬措施限制,比較常見的是通過固定時間檢測某ip位址通路量來判斷該使用者是否為 “網絡機器人”,也就是所謂的爬蟲,如果被識别到,就面臨被封ip的風險,那樣你就不能通路該網址了。

通用的解決辦法是用代理ip進行爬取,但是收費的代理ip一般都是比較貴的,網上倒是有很多免費的代理ip網站,但是受時效性影響,大部分位址都不能用,有很多元護代理ip池的教程,即把爬取并檢測後能用代理ip放到“代理池裡”,等以後要用的時候再從裡面提取,在我看來,這種效率比較低,因為這類IP位址很快就失效,我們要做的是邊檢測邊使用,充分保證免費IP的時效性。

/2 抓取IP位址/

下面就開始實戰操作。

1.首先我們随便找一個免費代理ip網站,如下圖所示。

2、打開網頁檢視器,分析其網頁元素結構,如下圖所示。

3、就是一個簡單的靜态網頁,我們用requests和bs4将ip位址和對應端口爬下,如下圖所示。

4、每一行ip位址都由5個

标簽組成,而我們需要的是第一個标簽(對應IP位址)和第2個标簽(對應端口),是以從第一個開始,每隔5個取出ip位址(item[::5]),從第二個開始,每隔5個取出對應端口(item[1::5]),參數n為頁碼,每次隻在1頁取1個有用的ip位址,最終效果如下圖所示:

/3 驗證IP有效性/

這裡把百度百科作為目标網站,這個看似很普通的網站,反爬措施卻極為嚴格,爬不了幾條内容就開始請求失敗了,下面我以在百度百科查詢全國火車站歸屬地資訊為例示範如何使用免費代理ip。

1、首先我在12306上把所有的火車站名都爬下來了,但是沒有歸屬地資訊。

2、然後以站名構造百度百科url資訊,分析網頁元素,把爬取爬取火車站位址資訊,網頁元素如下圖所示:

3、是以,我們隻需在class_='basicInfo-item'的标簽内容裡查找有無“省”或者“市”的字元,然後輸出就行了,最後加一個while True循環,當該ip能正常爬資料時,則break該循環;若該ip被禁,則馬上重新請求一個新ip進行爬取。直接上代碼如下圖所示:

4、其中for循環是周遊所有火車站,try是用于檢測該ip還能不能用,若不能,則在except裡請求1個新ip,爬取效果如下圖所示:

下次再遇到爬蟲被禁的情況就可以用此辦法解決了。

/4 結語/

本文基于Python網絡爬蟲技術,主要介紹了去IP代理網站上抓取可用IP,并且Python腳本實作驗證IP位址的時效性,如遇到爬蟲被禁的情況就可以用本文的辦法進行解決。

關于本文的代碼,小編已經上傳到github了,背景回複“IP代理”四個字,即可擷取代碼連結,如果覺得不錯,記得給個star噢!

手把手教你用免費代理ip爬資料