Python,開發爬蟲的不二選擇

互聯網是由一個個站點和網絡設備組成的大網,我們通過瀏覽器訪問站點,站點把HTML、JS、CSS代碼返回給瀏覽器,這些代碼經過瀏覽器解析、渲染,將豐富多彩的網頁呈現我們眼前。

如果我們把互聯網比作一張大的蜘蛛網,數據便是存放於蜘蛛網的各個節點,而爬蟲就是一隻小蜘蛛,沿著網絡抓取自己的獵物(數據)。爬蟲指的是:向網站發起請求,獲取資源後分析並提取有用數據的程序。

如今,人類社會已經進入了大數據時代,如何高效的獲取數據,已經成了各個互聯網公司的技術研發重點,掌握爬蟲技術已經成為了大數據公司技術人員不可或缺的一項技能。

開發爬蟲使用的語言,一般有C++、Java或者Python等,這些都是面向對象的編程語言。其中C++和Java都是強類型語言,而Python是一種弱類型語言。那麼這三類語言都是有什麼優缺點呢?請看下面描述:

1)JAVA

Java的語法比較規則,採用嚴格的面向對象編程方法,同時有很多大型的開發框架,比較適合企業級應用。Java的學習曲線較長,不僅要學習語言相關的特性,還要面向對象的軟件構造方法,在此之後要學習一些框架的使用方法。

(1)用途:Android & IOS 應用開發,視頻遊戲開發,桌面GUIs(即圖形用戶頁面),軟件開發,架構等。

(2)優勢:面向對象開源、跨平臺、市場需求旺盛;Android開發的基石, 是Web開發的主流語言;

(3)缺點:佔用大量的內存,啟動時間較長,不直接支持硬件級別的處理

2)Python

python是動態形的靈活的解釋性語言,從軟件開發到Web開發,Python都有在被使用。

因為它是解釋性腳本語言,適合輕量級開發。Python是比較好學的語言。

(1)用途:爬蟲,Web開發,視頻遊戲開發,桌面GUIs(即圖形用戶頁面),軟件開發,架構等。

(2)優勢:動態解釋型、擁有強大的開源類庫、開發效率高、開源,靈活,入門低易上手

(3)缺點:運行速度低於編譯型語言,在移動計算領域乏力

3)C++

C++更接近於底層,方便直接操作內存。C++不僅擁有計算機高效運行的實用性特徵,同時還致力於提高大規模程序的編程質量與程序設計語言的問題描述能力。C++運行效率較高,同時能夠比較容易地建立大型軟件,適合對效率要求高的軟件。C++的內容非常複雜,同時語言經過了幾十年的演化,所以學習起來難度較大,開發效率較低。

1)用途: 機器學習中的神經網絡、大型遊戲編程、後臺服務、桌面軟件等

2)優勢:運行效率高、安全、面向對象、簡潔、可重用性好等

3)缺點:沒有垃圾回收機制,可能引起內存設漏; 學習難度大,開發效率相對較低;

通過在GitHub上搜索”爬蟲”,我們可以發現,目前市面上的開源爬蟲項目,Python佔百分八十的份額。

而且目前市面上,具有兩年以上Python爬蟲經驗的工程師,其工資普遍高於Java和C++爬蟲工程師。

所以,Python才是開發爬蟲不二的選擇。那麼一個初學者掌握哪些知識,就可以使用Python開發爬蟲呢?

1. 網絡

urllib -網絡庫(stdlib)。

requests -網絡庫。

grab – 網絡庫(基於pycurl)。

pycurl – 網絡庫(綁定libcurl)。

urllib3 – Python HTTP庫,安全連接池、支持文件post、可用性高。

httplib2 – 網絡庫。

RoboBrowser – 一個簡單的、極具Python風格的Python庫,無需獨立的瀏覽器即可瀏覽網頁。

MechanicalSoup -一個與網站自動交互Python庫。

mechanize -有狀態、可編程的Web瀏覽庫。

socket – 底層網絡接口(stdlib)。

2. HTML/XML解析器

lxml – C語言編寫高效HTML/ XML處理庫。支持XPath。

cssselect – 解析DOM樹和CSS選擇器。

pyquery – 解析DOM樹和jQuery選擇器。

BeautifulSoup – 低效HTML/ XML處理庫,純Python實現。

html5lib – 根據WHATWG規範生成HTML/ XML文檔的DOM。該規範被用在現在所有的瀏覽器上。

feedparser – 解析RSS/ATOM feeds。

MarkupSafe – 為XML/HTML/XHTML提供了安全轉義的字符串。

3. 瀏覽器自動化與仿真

selenium – 自動化真正的瀏覽器(Chrome瀏覽器,火狐瀏覽器,Opera瀏覽器,IE瀏覽器)。

Ghost.py – 對PyQt的webkit的封裝(需要PyQT)。

Spynner – 對PyQt的webkit的封裝(需要PyQT)。

Splinter – 通用API瀏覽器模擬器(selenium web驅動,Django客戶端,Zope)。

4. 多重處理

threading – Python標準庫的線程運行。對於I/O密集型任務很有效。對於CPU綁定的任務沒用,因為python GIL。

multiprocessing – 標準的Python庫運行多進程。

celery – 基於分佈式消息傳遞的異步任務隊列/作業隊列。

concurrent-futures – concurrent-futures 模塊為調用異步執行提供了一個高層次的接口。

5. 異步網絡編程庫

asyncio – (在Python 3.4 +版本以上的 Python標準庫)異步I/O,時間循環,協同程序和任務。

gevent – 一個使用greenlet 的基於協程的Python網絡庫。

6. 網頁內容提取

HTML頁面的文本和元數據

newspaper – 用Python進行新聞提取、文章提取和內容策展。

html2text – 將HTML轉為Markdown格式文本。

python-goose – HTML內容/文章提取器。

lassie – 人性化的網頁內容檢索工具

瞭解了以上的知識點以後,我們獲取網絡數據的方式有哪些呢?

方式1:瀏覽器提交請求--->下載網頁代碼--->解析成頁面

方式2:模擬瀏覽器發送請求(獲取網頁代碼)->提取有用的數據->存放於數據庫或文件中

爬蟲要做的就是方式2。

1、發起請求

使用http庫向目標站點發起請求,即發送一個Request

Request包含:請求頭、請求體等

Request模塊缺陷:不能執行JS 和CSS 代碼

2、獲取響應內容

如果服務器能正常響應,則會得到一個Response

Response包含:html,json,圖片,視頻等

3、解析內容

解析html數據:正則表達式(RE模塊),第三方解析庫如Beautifulsoup,pyquery等

解析json數據:json模塊

解析二進制數據:以wb的方式寫入文件

4、保存數據

數據庫(MySQL,Mongdb、Redis)、文件

目前上市面上開源爬蟲項目主要有一下八個:

1.Scrapy

Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。。用這個框架可以輕鬆爬下來如亞馬遜商品信息之類的數據。

項目地址:https://scrapy.org/

2.PySpider

pyspider 是一個用python實現的功能強大的網絡爬蟲系統,能在瀏覽器界面上進行腳本的編寫,功能的調度和爬取結果的實時查看,後端使用常用的數據庫進行爬取結果的存儲,還能定時設置任務與任務優先級等。

項目地址:https://github.com/binux/pyspider

3.Crawley

Crawley可以高速爬取對應網站的內容,支持關係和非關係數據庫,數據可以導出為JSON、XML等。

項目地址:http://project.crawley-cloud.com/

4.Portia

Portia是一個開源可視化爬蟲工具,可讓您在不需要任何編程知識的情況下爬取網站!簡單地註釋您感興趣的頁面,Portia將創建一個蜘蛛來從類似的頁面提取數據。

項目地址:https://github.com/scrapinghub/portia

5.Newspaper

Newspaper可以用來提取新聞、文章和內容分析。使用多線程,支持10多種語言等。

Python,開發爬蟲的不二選擇

項目地址:https://github.com/codelucas/newspaper

6.Beautiful Soup

Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間。

Python,開發爬蟲的不二選擇

項目地址:https://www.crummy.com/software/BeautifulSoup/bs4/doc/

7.Grab

Grab是一個用於構建Web刮板的Python框架。藉助Grab,您可以構建各種複雜的網頁抓取工具,從簡單的5行腳本到處理數百萬個網頁的複雜異步網站抓取工具。Grab提供一個API用於執行網絡請求和處理接收到的內容,例如與HTML文檔的DOM樹進行交互。

項目地址:http://docs.grablib.org/en/latest/#grab-spider-user-manual

8.Cola

Cola是一個分佈式的爬蟲框架,對於用戶來說,只需編寫幾個特定的函數,而無需關注分佈式運行的細節。任務會自動分配到多臺機器上,整個過程對用戶是透明的。

項目地址:https://github.com/chineking/cola



分享到:


相關文章: