抓取始終是一個很大的需求,小到單個頁面,某個站點,大到搜尋引擎(百度、谷歌)的全網抓取。只要人能看到的東西,理論上都是爬蟲可以獲取的。不論靜態頁面還是動態頁面。也不論pc端的頁面還是移動端的app。話有點大,但這就是本系列的目的。爬蟲編程,有很多語言可選,python、php、go、java···甚至是c。這裡我們選擇python作為爬蟲的程式語言,因為它簡單易上手,並且節約生命。
python爬蟲
這裡需要聲明的是以下的教程都是基於python2.7的,python3已經有很大的變化了。不了解python如何開始我們的爬蟲呢?隨便找個python教程,花五分鐘時間看一下基本語法,就可以回來繼續我們的爬蟲之旅。python中可以用來做爬蟲的庫也有很多,比較常用的是urllib、urllib2和requests,這三個庫基本可以解決大部分抓取需求,我們也將從這裡開始學起。很多人做了一段時間的爬蟲了,也不是很清楚這三者的關係,用這個庫的這個方法也可以,那個庫的那個方法也行,區別是啥,很容易混淆。所以下面我們對這三個庫的關係和區別有一個清晰的認識。
urllib、urllib2、requests關係
urllib和urllib2是python標準庫,就是你安裝了python,這兩個庫就已經可以直接使用了;requests是第三方庫,不是python基金會實現的,但是功能是很強大的。
urllib和urllib2
我們先說這兩個標準庫,這兩個庫做爬蟲也基本夠用了,不用requests也是可以的。
urllib和urllib2都是通過url打開資源,其中urllib短板是在太大,例如它只能接受url,卻如法對請求進行headers的偽裝,這樣寫的爬蟲發送的請求會被很多網站直接阻擋掉。因此python基金會不得不推出urllib2對這塊功能進行增強。urllib2可以接受一個Request對象,並以此設置一個URL的headers。但是問題在於urllib2並沒有完全取代urllib的所有功能,比如urllib中的urlencode()方法,在urllib2中就是沒有的。所以urllib和urllib2不得不一起使用。
requests
urllib和urllib2是夠亂的吧,使用時還要考慮url編碼等等問題。第三方庫requests出現了,它的slogen是Requests is the only Non-GMO HTTP library for Python, safe for human consumption.相對於標準庫urllib、urllib2也確實有資格說這句話。以上基礎的東西(urllib、urllib2、requests)我們還是要了解的,在這個過程中知道爬蟲是怎麼回事,以後再使用其他庫、框架、搞分布式什麼的