/1 前言/
前幾天小編發布了手把手教你使用Python爬取西次代理資料(上篇),木有趕上車的小伙伴,可以戳進去看看,今天小編帶大家進行網頁結構的分析以及網頁資料的提取,具體步驟如下,
/2 首頁分析及提取/
首先進入網站主頁,如下圖所示,

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

規律顯而易見,在程式中,我們使用一個 for 回圈即可完整這個操作:

其中 scrapy 函式是爬取的主要邏輯,對應的代碼為:

通過這個方式,我們可以得到每一頁的資料,
/3 網頁元素分析及提取/
接下來就是對頁面內的元素進行分析,提取其中的代理資訊,

如上圖,我們目的是進行代理地域分布分析,同時,在爬取程序中需要使用爬取的資料進行代 理更新,所以需要以下幾個欄位的資訊:
Ip 地址、埠、服務器位置、型別
為此,先構建一個類,用于保存這些資訊:

這樣,每爬取一條資訊,只要實體化一個 ProxyBean 類即可,非常方便,
接下來就是提取元素程序了,在這個程序我使用了正則運算式和 BeautifulSoup 庫進行關鍵資料提取,
首先,通過分析網頁發現,所有的條目實際上都是放在一個標簽中,

該便簽內容如下:
正則運算式為:([\S\s]*)

其中得到的 data 就是這個標簽的內容了,下面進一步分析,
進入到 table 中,發現每一個代理分別站 table 的一列,但是這些標簽分為兩類,一 類包含屬性 , 另一類不包含,

這個時候,可以使用 BeautifulSoup 對標簽進行提取:

通過這種方式,就能獲取到每一個列的串列了,
接下來就是從每個列中獲取 ip、埠、位置、型別等資訊了,進一步分析頁面:
1、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="https://www.cnblogs.com/dcpeng/p/([>]*)>([<]*)

4、型別欄位
型別欄位如下:

由包裹,中間為字母,構造正則如下:
([A-Za-z]+)
資料全部獲取完之后,將其保存到檔案中即可:

最后爬取的資料集如下圖所示:

此次總共爬取了前面 5300 多條資料,
/4 小結/
本次任務主要爬取了代理網站上的代理資料,主要做了以下方面的作業:
1、學習 requests 庫的使用以及爬蟲程式的撰寫;
2、學習使用反爬蟲技術手段,并在實際應用中應用這些技術,如代理池技術;
3、學習使用正則運算式,并通過正則運算式進行網頁元素提取;
4、學習使用 beautifulsoup 庫,并使用該庫進行網頁元素的提取,
Python爬蟲是一項綜合技能,在爬取網站的程序中能夠學到很多知識,希望大家多多專研,需要代碼的小伙伴,可以在[Python爬蟲與資料挖掘]公眾號后臺回復“代理”二字,即可獲取,
想學習更多關于Python的知識,可以參考Python爬蟲與資料挖掘網站:http://pdcfighting.com/
本文由博客群發一文多發等運營工具平臺 OpenWrite 發布
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/152404.html
標籤:Python
上一篇:Python學習筆記:面向物件
下一篇:信號量
