常用爬蟲技術

2021-10-06 17:32:47 字數 2411 閱讀 7215

一、常用爬蟲技術

解析網頁主要三種工具

正規表示式:使用預定義的模式去匹配一類具有相同特徵的字串,可以快速、準確的完成複雜的查詢,替換等處理要求。

lxml庫:lxml庫使用xpath語法,同樣是效率較高的解析庫。是一門在xml文件中查詢資訊的語言,可以在xml文件中對元素和屬性進行遍歷

bs4.beautifulsoup:beautifulsoup可以從html和xml檔案中提取資料的python庫,能夠實現文件的導航和查詢,簡單易學,相比上面速度較慢

爬蟲框架

常見的有scrapy(最著名,最受歡迎)、pyspider、cola

二、爬蟲基礎

http請求

超文字傳輸協議(http)是一種通訊協議,它允許將超文字標記語言(html)編寫的文件從web伺服器端傳送到客戶端的瀏覽器。http請求可以理解為瀏覽器到web伺服器的請求訊息

http請求資訊有請求方法,請求頭部,請求正文組成

請求方法

常見的請求方法有get()和post()

get方法。get方法請求指定的頁面資訊。如要查詢字串,這些資訊包含在get請求的url中

post方法。post方法向指定的資源提交要被處理的資料(如提交表單或者使用者登入驗證),資料報含在請求體中。post請求可能會導致新的資源建立或者已有資源的修改

get方式提交的資料最多只有1024kb,而post則沒有限制。使用get時,引數顯示在位址列,而post不會

請求頭部

請求頭部包含很多客戶端環境和請求正文資訊。如,請求頭部可以宣告瀏覽器所用語言,瀏覽器型別,作業系統,請求正文長度等

一般**伺服器最常用發爬蟲措施是通過讀取請求頭部的使用者**(user-agent)資訊,來判斷這個請求使來自於正常的瀏覽器還是爬蟲

為應對伺服器這種反爬蟲測略,編寫爬蟲系統經常需要構造請求頭部,來偽裝乙個正常的瀏覽器

request headers由眾多頭域組成,每個頭域有乙個網域名稱、冒號、值域組成。他以字典的形式列出資訊。其中包含最重要的user-agent(使用者**資訊)

http響應

瀏覽器傳送http請求後,web伺服器會返回乙個響應,其中儲存了伺服器響應的內容,該響應以html格式傳送給瀏覽器的,。同時伺服器會傳送乙個響應狀態碼(http status code),http狀態碼主要是為了標識此次請求的執行狀態。狀態碼有三位十進位制數字組成,第乙個數字定義響應的類別

1xx:提示資訊,表示伺服器已收到請求,需請求者繼續操作

2xx:成功,表示請求已成功接收,理解並處理

3xx:重定向,要完成請求必須更進一步的操作

4xx:客戶端錯誤,請求有語法錯誤或請求無法實現

5xx:服務端錯誤,伺服器在處理請求過程中發生錯誤

常用的http狀態碼及含義

100:客戶端應當繼續傳送請求

200:請求成功

301:資源被永久轉移到其他url

302:請求的資源現在臨時從不同的url響應

400:語義或者請求引數有誤

404:請求的資源不存在

500:伺服器內部錯誤

501:伺服器無法識別請求

requests庫,非python標準庫,需安裝

requests上傳送請求使用get方法或post方法,如果只請求頭部,可以使用head方法

使用requests請求方法後,系統會返回乙個響應物件,它儲存了伺服器響應的內容,可使用response物件的的text屬性獲取文字屬性的響應內容。requests會自動解碼來自伺服器的內容。可使用response.encoding檢視編碼方式,也可修改response.encoding屬性讓response.text使用其他編碼方式進行解碼

伺服器通過讀取請求頭部的使用者**資訊,來判斷這個請求是正常的瀏覽器還是爬蟲系統發出的。因此,需要為請求新增http頭部來偽裝成正常的瀏覽器。解決方法是構造乙個使用者**的字典給請求頭部就可以了

預設情況下,除了head請求方法,requests會自動處理所有的重定向。可以使用響應物件的history屬性追蹤重定向。history屬性返回乙個列表,他是乙個response物件的列表。可以使用url屬性檢視實際請求的url

在爬取網頁的過程中,有時伺服器可能沒有響應。為應對這種情況,設定timeout引數來定義超時時間(單位為秒)。超時停止等待

url傳遞查詢引數時(瀏覽器搜尋看位址列裡?後面的就是引數),查詢的資料以鍵=值形式跟在?後面,多個查詢資料以&相連

requests的get方法允許使用params關鍵字引數,post方法使用data關鍵字引數

這些引數有乙個字串字典提供

使用response物件的status_code欄位獲取響應碼

如果響應中包含cookie,使用如下方式獲取cookie欄位的值

for cookie in response.cookie.keys()

print(cookie,":",response.cookie.get(cookie))

網路爬蟲技術

網路爬蟲技術 1 不同領域 不同背景的使用者往往具有不同的檢索目的和需求,通用搜尋引擎所返回的結果包含大量使用者不關心的網頁。2 通用搜尋引擎的目標是盡可能大的網路覆蓋率,有限的搜尋引擎伺服器資源與無限的網路資料資源之間的矛盾將進一步加深。4 通用搜尋引擎大多提供基於關鍵字的檢索,難以支援根據語義資...

網路爬蟲技術

1 不同領域 不同背景的使用者往往具有不同的檢索目的和需求,通用搜尋引擎所返回的結果包含大量使用者不關心的網頁。2 通用搜尋引擎的目標是盡可能大的網路覆蓋率,有限的搜尋引擎伺服器資源與無限的網路資料資源之間的矛盾將進一步加深。4 通用搜尋引擎大多提供基於關鍵字的檢索,難以支援根據語義資訊提出的查詢。...

網路爬蟲技術

1 不同領域 不同背景的使用者往往具有不同的檢索目的和需求,通用搜尋引擎所返回的結果包含大量使用者不關心的網頁。2 通用搜尋引擎的目標是盡可能大的網路覆蓋率,有限的搜尋引擎伺服器資源與無限的網路資料資源之間的矛盾將進一步加深。4 通用搜尋引擎大多提供基於關鍵字的檢索,難以支援根據語義資訊提出的查詢。...