使用Python爬取代理資料

amingMM發表於2021-01-02

在這裡插入圖片描述


QQ 1274510382
Wechat JNZ_aming
商業聯盟 QQ群538250800
技術搞事 QQ群599020441
解決方案 QQ群152889761
加入我們 QQ群649347320
共享學習 QQ群674240731
紀年科技aming
網路安全 ,深度學習,嵌入式,機器強化,生物智慧,生命科學。

叮叮叮:產品已上線 —>關注 官方-微信公眾號——濟南紀年資訊科技有限公司
民生專案:商城加盟/娛樂交友/創業商圈/外包兼職開發-專案釋出/
安全專案:態勢感知防禦系統/內網巡查系統
雲服專案:動態擴容雲主機/域名/彈性儲存-資料庫-雲盤/API-AIeverthing
產品諮詢/服務售後(同)

紙上得來終覺淺,絕知此事要躬行 !!!
尋找志同道合夥伴創業中。。。抱團滴滴aming聯絡方式!!


結構的分析以及網頁資料的提取

/2 首頁分析及提取/

簡單分析下頁面,
其中後面的 1 是頁碼的意思,分析後發現每一頁有100 多條資料,
然後網站底部總共有 2700+頁 的連結,
所以總共ip 代理加起來超過 27 萬條資料,
但是後面的資料大部分都是很多年前的資料了,比如 2012 年,
大概就前 5000 多條是最近一個月的,所以決定爬取前面100 頁。
通 過網站 url 分析,可以知道這 100 頁的 url 為:

在這裡插入圖片描述
規律顯而易見,在程式中,我們使用一個 for 迴圈即可完整這個操作:
在這裡插入圖片描述
其中 scrapy 函式是爬取的主要邏輯,對應的程式碼為:
在這裡插入圖片描述
通過這個方式,我們可以得到每一頁的資料

/3 網頁元素分析及提取/

接下來就是對頁面內的元素進行分析,提取其中的代理資訊。

在這裡插入圖片描述
在這裡插入圖片描述
如上圖,我們目的是進行代理地域分佈分析,
同時,在爬取過程中需要使用爬取的資料進行代 理更新,
所以需要以下幾個欄位的資訊:

Ip 地址、埠、伺服器位置、型別

為此,先構建一個類,用於儲存這些資訊:

在這裡插入圖片描述
這樣,每爬取一條資訊,只要例項化一個 ProxyBean 類即可,非常方便。

接下來就是提取元素過程了,
在這個過程我使用了正規表示式和  BeautifulSoup 庫進行關鍵資料提取。

首先,通過分析網頁發現,所有的條目實際上都是放在一個<table>標籤中。

在這裡插入圖片描述
該便籤內容如下:

<table id="ip_list">……</table>
我們首先通過正規表示式將該標籤的內容提取出來:

正規表示式為:<table id="ip_list">([\S\s]*)</table>, 
表示搜尋<table id="ip_list">到</table>之 間的任意字元組成的資料。
Python 中的實現如下:

在這裡插入圖片描述
其中得到的 data 就是這個標籤的內容了。下面進一步分析。

進入到 table 中,發現每一個代理分別站 table 的一列<tr>,
但是這些<tr>標籤分為兩類,一 類包含屬性 class="odd", 另一類不包含

在這裡插入圖片描述
在這裡插入圖片描述
通過這種方式,就能獲取到每一個列的列表了。

接下來就是從每個列中獲取 ip、埠、位置、型別等資訊了。進一步分析頁面:

在這裡插入圖片描述
我們使用正規表示式對 IP 進行解析,IP 正則如下:

** (2[0-5]{2}|[0-1]?\d{1,2})(.(2[0-5]{2}|[0-1]?\d{1,2})){3}**

在這裡插入圖片描述
2、 埠欄位
在這裡插入圖片描述
埠由包裹,並且中間全部是數字,故可構造如下正則進行提取:

<td>([0-9]+)</td>

在這裡插入圖片描述
3、 位置欄位

位置欄位如下:

在這裡插入圖片描述
由 便籤包裹,構造如下正則即可提取:

 <a href="([^>]*)>([^<]*)</a>

在這裡插入圖片描述
4、型別欄位

型別欄位如下:

在這裡插入圖片描述
由包裹,中間為字母,構造正則如下:

 <td>([A-Za-z]+)</td>

在這裡插入圖片描述
資料全部獲取完之後,將其儲存到檔案中即可:

在這裡插入圖片描述
在這裡插入圖片描述
/4 小結/

本次任務主要爬取了代理網站上的代理資料。主要做了以下方面的工作:

學習 requests 庫的使用以及爬蟲程式的編寫;
學習使用反爬蟲技術手段,並在實際應用中應用這些技術,如代理池技術;
學習使用正規表示式,並通過正規表示式進行網頁元素提取;
學習使用 beautifulsoup 庫,並使用該庫進行網頁元素的提取。

相關文章