不夸張地說,現在哪怕是初中生,只要花點兒時間、精力稍微按「網絡爬蟲」的開發步驟學習了解一下,也能把它玩得賊溜。
聽起來感覺是很高大上的東西,但實際上并不復雜,也就是使用了某種編程語言按照一定步驟、規則主動通過互聯網來抓取某些特定信息的代碼程序。
現在常見的就是使用 Python 來實現網絡爬蟲,后面慢慢講。
1、基本原理
其它慢點兒再說,咱先來簡單了解一下網絡爬蟲的實現原理。
網絡爬蟲是指按照一定的規則,自動從互聯網上抓取網頁信息的程序。網絡爬蟲是搜索引擎的重要組成部分,它通過不斷地訪問和抓取網頁信息,來建立索引和更新搜索結果。
網絡爬蟲的實現原理主要包括以下幾個步驟,然后我再解釋一下:
- 發送 HTTP 請求
- 接收 HTTP 響應
- 解析 HTML 頁面
- 提取數據
- 保存數據
發送 HTTP 請求
網絡爬蟲首先需要發送 HTTP 請求到網站服務器,請求獲取網頁信息。HTTP 請求包含了網頁的 URL 地址、請求方式、請求頭和請求體等信息。
接收 HTTP 響應
網站服務器收到 HTTP 請求后,會返回 HTTP 響應。HTTP 響應包含了網頁的 HTML 代碼、響應頭和響應體等信息。
解析 HTML 頁面
網絡爬蟲接收到 HTTP 響應后,需要解析 HTML 頁面,以獲取網頁中的數據。HTML 頁面由 HTML 標簽組成,每個 HTML 標簽都有自己的屬性和值。網絡爬蟲通過解析 HTML 標簽,可以獲取網頁中的數據,例如文本、圖像、鏈接等。
提取數據
網絡爬蟲解析HTML頁面后,需要提取網頁中需要的數據。網絡爬蟲可以通過正則表達式、XPath 或 CSS 選擇器來提取網頁中的數據。
保存數據
網絡爬蟲提取網頁中的數據后,需要將數據保存到數據庫或文件中。數據可以保存為文本格式、CSV 格式、JSON 格式或XML格式等。
網絡爬蟲是搜索引擎的重要組成部分,它通過不斷地訪問和抓取網頁信息,來建立索引和更新搜索結果。網絡爬蟲還被用于其他領域,例如數據采集、內容分析、用戶行為分析等。
如果說,咱現在單純使用 Python 來實現的話,大概就兩大步驟:
第一步,使用 Python 的網絡模塊(urllib2\httplib\requests)來模擬客戶端向服務端發送請求,在服務端正常響應之后,服務端即可接收到需要處理的相關網頁信息。
第二步,在服務端可以通過一些數據過濾模塊(lxml\html.parser\re)將目標信息從網頁中過濾出來。
有時候,在反爬蟲操作時,可以在 Python 發送的請求中添加相關的 Header 和 Cookies,還可以利用代理、設置間隔訪問的時間等等。
在過濾數據的時候,其實很簡單,只需要熟悉過濾模塊的規則即可。只是說在剛接觸的時候,那些模塊中的規則很多,不過用得多了自然就記得熟了。
一般來說,熟練使用其中一個模塊基本夠用了,如果真碰上一個模塊無法萬一過濾好有效信息,那么就使用多模塊協作的方式。
如果你之前也用過,就知道正則表達式(re)模塊就已經相當強了,雖然一開始用的時候總感覺很復雜,但在過濾數據這件事兒上相當高效的。
2、爬行策略
在需要使用爬蟲的時候,也就是數據很多的時候,如果有很多數據的話,那么就需要注意順序問題了,也就是說先爬哪一頁,然后再爬哪一頁,需要弄清楚。
爬行的順序,有點兒像二叉樹,一個是深度優先,一個是廣度優先,平時我們采用深度優先的方式比較多一些。
比如,我們先會去訪問第一個頁面 html01,然后找到第一個數據 data01;然后再去找第二個頁面 html02,找第二個數據 data02,以此類推。比如使用 bs 就是這種方式,后面我們會用到,這種方式比較常見。
還有就是采用廣度優先算法的,也很簡單。就是先去收集所有的網頁數據,然后挨個去過濾、獲取自己的有效數據。比如使用 PySpider,后面再給大家演示,不過這種方式用得比較少。
如果說,你要去爬大型的網站,或者說是多個網站的話,那就需要根據網站的大小、網頁的重要性以及權重等不同因素來分成不同的等級去爬取。
比較流行的爬行策略有 pagerank、opic 等等。
3、識別用戶
另外,服務端是如何識別用戶身份的呢?主要是 Cookie。在 Python 中,使用的模塊是 cookielib。
Cookie 是指網站為了識別用戶的身份,進行 session 跟蹤而存儲在用戶本地終端上的數據,當然為了安全,這個數據是加密的。