爬蟲初識

Lea4ning發表於2024-03-28

爬蟲初識

【一】爬蟲介紹

【1】定義

  • 爬蟲是一種自動化獲取網際網路資料的技術,透過模擬瀏覽器行為,向目標網站傳送請求並獲取響應,然後解析響應中的資料。
  • 應用領域:爬蟲可以應用於各種網站資料的獲取

【2】工作原理

  • 爬蟲透過傳送HTTP請求,模擬瀏覽器行為,獲取網站的響應,並解析響應中的資料。

【3】分類

  1. 通用爬蟲 vs. 專用爬蟲
    • 通用爬蟲:用於抓取網際網路上的大量網頁,如搜尋引擎爬蟲(例如Googlebot、Bingbot等)。
    • 專用爬蟲:針對特定的網站、領域或任務設計,如價格比較爬蟲、新聞聚合爬蟲等。
  2. 按照工作方式分類
    • 單執行緒爬蟲:一次只能處理一個請求的爬蟲。
    • 多執行緒/併發爬蟲:可以同時處理多個請求,提高爬取效率。
    • 非同步爬蟲:利用非同步程式設計技術,在傳送請求時不會阻塞程式的執行,可以更高效地處理大量的請求。
  3. 按照爬取深度分類
    • 表面爬蟲:只爬取網頁上的靜態內容,不會深入到網頁內部的連結。
    • 深度爬蟲:會跟蹤網頁內部的連結,繼續爬取連結指向的頁面,形成一個更深的爬取結構。
  4. 按照目標網站型別分類
    • 靜態網站爬蟲:用於爬取靜態網頁的內容。
    • 動態網站爬蟲:能夠處理JavaScript等動態內容,爬取動態網頁的內容。
  5. 基於資料獲取方式分類
    • 基於API的爬蟲:透過呼叫網站提供的API介面獲取資料。
    • 基於頁面解析的爬蟲:直接解析網頁內容獲取資料。

【4】Python爬蟲的常用庫

  • requests庫

    • 用於傳送HTTP請求,方便地傳送GET、POST等請求,並獲取響應。
    • 應用領域:爬蟲可以使用requests庫來傳送請求和獲取響應。
  • BeautifulSoup庫

    • 用於解析HTML和XML文件,方便地提取其中的資料。

    • 應用領域:爬蟲可以使用BeautifulSoup庫來解析網頁並提取需要的資料。

  • Selenium庫

    • 用於模擬瀏覽器行為,模擬使用者在瀏覽器中的操作,如點選、輸入等。
    • 應用領域:爬蟲可以使用Selenium庫來模擬使用者行為,獲取需要的資料。
  • Scrapy框架

    • 提供了一套完整的爬蟲開發流程,包括髮送請求、獲取響應、解析響應、儲存資料等步驟。

    • 應用領域:爬蟲可以使用Scrapy框架進行爬蟲開發。

【5】爬蟲的注意事項

  • 爬蟲的合法性

    • 在進行爬蟲開發時,需要遵守相關的法律法規,如《計算機軟體保護條例》、《網際網路資訊服務管理辦法》等。
  • 爬蟲的速度

    • 需要注意爬蟲的速度,避免對目標網站造成過大的負擔。
  • 爬蟲的穩定性

    • 需要注意爬蟲的穩定性,避免因為網路波動等原因導致爬蟲中斷。
  • 爬蟲的資料儲存

    • 需要注意資料的儲存方式,避免因為資料量過大導致儲存不足。

【6】爬蟲的基本流程

  1. 確定爬取目標
    • 確定要爬取的網站或者網頁。
    • 確定要提取的資訊型別,例如文字、圖片、連結等。
  2. 傳送HTTP請求
    • 向目標網站傳送HTTP請求,請求頁面的內容。
    • 可能需要設定請求頭,包括使用者代理資訊等,以模擬正常瀏覽器行為。
  3. 獲取網頁內容
    • 接收網站返回的響應,獲取頁面的HTML程式碼或其他標記語言。
    • 可能需要處理響應,例如處理重定向、處理HTTP錯誤等。
  4. 解析網頁內容
    • 使用解析庫(如Beautiful Soup、lxml等)解析HTML或其他標記語言,提取出所需資訊。
    • 根據需要,可能需要使用正規表示式或XPath來定位和提取特定的內容。
  5. 處理資料
    • 對提取的資料進行清洗、轉換、去重等處理,以確保資料的質量和一致性。
    • 可能需要將資料儲存到資料庫、檔案或者其他資料儲存介質中。
  6. 儲存資料
    • 將處理後的資料儲存到指定的儲存介質中,如資料庫、檔案系統等。
    • 根據需求,可能需要定期更新已儲存的資料。
  7. 處理連結
    • 如果需要爬取更多頁面,解析當前頁面中的連結,將新的連結加入爬取佇列。
    • 保持跟蹤已經爬取的頁面,避免重複爬取或者進入死迴圈。
  8. 控制爬取速度
    • 為了避免對目標網站造成過大的負擔或者被封禁,需要控制爬取速度,避免過快地傳送請求。
    • 可以使用延時等手段來控制爬取速度。
  9. 處理異常情況
    • 處理網路請求超時、頁面解析錯誤等異常情況,確保爬蟲的穩定性和健壯性。
    • 可以記錄日誌、傳送警報等方式來監控和處理異常情況。

【7】常見的反爬蟲措施

  • 頻率限制

    • 網站會針對某個IP地址或使用者賬號設定請求頻率限制,如單位時間內只允許傳送一定數量的請求。

    • 一旦超出限制,網站會對該IP或賬號進行處罰,如暫時封禁或限制訪問。

  • 封IP和封賬號

    • 網站可以透過監測異常行為,如頻繁請求、高併發等來判斷是否有惡意爬取行為,並對相關IP地址或賬號進行封禁。

    • 為了規避封禁,爬蟲可以使用代理池來隨機切換IP地址,或使用大量小號(賬號池)輪流傳送請求。

  • 請求頭中帶加密資訊

    • 網站可能要求請求頭中包含特定的加密資訊,如Referer(來源頁面地址)和User-Agent(瀏覽器標識),用於驗證請求的合法性。

    • 爬蟲需要模擬真實瀏覽器的請求頭資訊,以避免被檢測為非法爬蟲。

  • 響應回來的資料是加密

    • 為了防止直接獲取資料,網站可能會對返回的資料進行加密或編碼,爬蟲需要解密或解碼才能獲取到有效資訊。

    • 這種情況下,爬蟲可能需要分析加密演算法或從其他渠道獲取解密金鑰。

  • 驗證碼反扒

    • 網站為了防止機器自動註冊、惡意爬取等行為,可能會在關鍵操作前設定驗證碼。

    • 爬蟲需要透過第三方平臺或自己破解驗證碼來進行自動化操作。

  • JS加密

    • 網站可能使用JavaScript對核心程式碼進行了壓縮和混淆,以ers() -> function()的形式, ers.somethin() -> function somethin() ,並新增了一些晦澀的加密方法。

    • 爬蟲需要逆向工程來還原和理解這些加密演算法,並編寫相應的程式碼進行解密。

  • 手機裝置唯一ID號

    • 網站可能會根據爬蟲請求的裝置唯一識別符號(例如IMEI、Android ID、iOS裝置ID等)進行識別和限制。

    • 爬蟲可能需要模擬不同裝置的請求,或者透過修改裝置資訊達到繞過檢測的效果。

需要注意的是,對於某些網站,爬蟲繞過這些反爬蟲措施可能涉及到違法行為,建議在合法範圍內開展爬蟲活動,遵守相關法律法規和網站的使用規定。

相關文章