好像Python從流行起來,她就與爬蟲有著千絲萬縷的關系。一提到Python就想到爬蟲程序,可能是因為Python提供的庫比較方便吧,不管是自帶的urllib,還是各種第三方庫。總的來說,Python就是基礎知識之上,熟練使用第三方庫,以及框架。
而關于爬蟲的庫我想主要分為四大類:http協議庫,文檔解析庫,模擬瀏覽器,爬蟲框架。
1.urllib,urllib2,urllib3,requests
urllib和urllib2是Python2自帶的http庫,他們負責請求url鏈接并返回結果。urllib2并不完全是對urllib的升級,有時候得urllib和urllib2一起用,比如當你想在POST請求帶上參數的話,就得用urllib.urlencode()來格式化參數,就是這么蛋疼。不過Python3里,urllib和urllib2就合并啦。
自帶的urllib、urllib2有很多局限,比如說鏈接不可重用(http請求頭的connection值總是close)。
urllib3、requests都是針對urllib、urllib2改進的第三方庫。requests的底層使用urllib3來實現的,并且比urllib3提供了更強大的接口。所以啊,現在最強大的http庫應該就是requests了。
2.beautiful soup
beautiful soup是用來解析html和xml文檔的第三方庫,它支持多種解析引擎(包括原生的html引擎、xml引擎、html5lib引擎)。
通常的流程是先使用urllib庫請求某個url,然后將返回的html數據傳遞給beautiful soup進行解析。
通過urllib(requests)+beautiful soup結合可以很好滴爬取靜態網頁的內容。但現在的web技術,ajax跟node.js大行其道,很多網頁內容是通過JavaScript動態生成的,簡單地html爬蟲對此根本無能為力,除非你能破解出JavaScript動態加載的目標url,然后再訪問該地址并解析數據。或者可以模擬瀏覽器來解析頁面的dom模型,并進行操作。
另外,其實我們也可以用正則表達式re來解析html和xml文檔。
3.ghost、selenium
ghost是基于QtWebKit的無窗口瀏覽器。單文檔超寒酸,而且實現的功能也少,預期琢磨它的源碼,還不如自己學習下pyQt或者pySide,然后直接調用QtWebKit來得簡單粗暴。
selenium是一個可支持多款本地瀏覽器的“驅動器”,它同時提供多種程序語言接口。我們可以通過Python+selenium webdriver來驅動Firefox來訪問網頁、搜索dom元素進行各種操作。特別的,對于通過ajax來進行動態加載的網頁內容,selenium簡直就是人們的大救星。
4.srapy
scrapy是最負盛名的爬蟲框架,但目前為止,其實我就用了Python基本的庫,我一定要試試它!
5.我現在使用
我現在仍是一個初級爬蟲者,凡事基礎要打牢固,所以我現在使用的是urllib,urllib2以及requests來請求url鏈接并返回網頁結果,然后通過正則表達式來解析出自己所需要的,這樣剛好也把正則表達式給學習了。