C語言中文網 目錄

網絡爬蟲是什么,Scrapy又是什么?

在介紹數據可視化分析時,最后一個示例示范了展示從網絡上獲取的天氣信息。從廣義上說,那個例子也屬于網絡爬蟲,程序可以自動獲取多個頁面中的所有天氣信息。如果使用某種技術(如正則表達式、XPath 等)來提取頁面中所有的鏈接(<a.../> 元素),然后順著這些鏈接遞歸打開對應的頁面,最后提取頁面中的信息,這就是網絡爬蟲。

既然前面己經介紹了網絡爬蟲的知識,那么本章還有存在的意義嗎?在回答這個問題之前,我們來分析網絡爬蟲具體要做哪些核心工作:
  • 通過網絡向指定的 URL 發送請求,獲取服務器響應內容。
  • 使用某種技術(如正則表達式、XPath 等)提取頁面中我們感興趣的信息。
  • 高效地識別響應頁面中的鏈接信息,順著這些鏈接遞歸執行此處介紹的第 1、2、3 步;
  • 使用多線程有效地管理網絡通信交互。

如果直接使用 Python 內置的 urllib 和 re 模塊是否能寫出自己的網絡爬蟲呢?答案是肯定的,只是比較復雜。就像我們要從廣州去韶關,走路可以去嗎?答案是肯定的,只是比較麻煩。

下面繼續分析網絡爬蟲的核心工作:
  • 向 URL 發送請求,獲取服務器響應內容。這個核心工作其實是所有網絡爬蟲都需要做的通用工作。一般來說,通用工作應該由爬蟲框架來實現,這樣可以提供更穩定的性能,開發效率更高。
  • 提取頁面中我們感興趣的信息。這個核心工作不是通用的!每個項目感興趣的信息都可能有所不同,但使用正則表達式提取信息是非常低效的,原因是正則表達式的設計初衷主要是處理文本信息,而 HTML 文檔不僅是文本文檔,而且是結構化文檔,因此使用正則表達式來處理 HTML 文檔并不合適。使用 XPath 提取信息的效率要高得多。
  • 識別響應頁面中的鏈接信息。使用正則表達式可以實現這個核心工作,但是效率太低,使用 XPath 會更高效。
  • 多線程管理:這個核心工作是通用的,應該由框架來完成。

現在來回答上面提出的問題,本章有存在的意義嗎?當然有,本章并不介紹使用 urllib、re 模塊這種簡陋的工具來實現正則表達式,而是通過專業的爬蟲框架 Scrapy 來實現爬蟲。

Scrapy 是一個專業的、高效的爬蟲框架,它使用專業的 Twisted 包(基于事件驅動的網絡引擎包)高效地處理網絡通信,使用 lxml(專業的 XML 處理包)、cssselect 高效地提取 HTML 頁面的有效信息,同時它也提供了有效的線程管理。

一言以蔽之,上面列出的網絡爬蟲的核心工作,Scrapy 全部提供了實現,開發者只要使用 XPath 或 css 選擇器定義自己感興趣的信息即可。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo