環境
[!] urllib模組和urllib2模組的區別
urllib2可以接受乙個request類的例項來設定url請求的headers,urllib僅可以接受url。工作流程urllib提供urlencode方法用來get查詢字串的產生,而urllib2沒有。
定位需要爬取的頁面,糗事百科首頁
用urllib2的request類構建乙個request
url = ""
request = urllib2.request(url)
接下來用urllib2的urlopen方法來請求頁面,並獲取響應(即頁面內容)
response = urllib2.urlopen(request)
列印獲取到的內容
print response.read()
執行我們的指令碼,結果報錯了:
這是因為糗事百科針對爬蟲的一些反爬優化,必須是瀏覽器才能訪問頁面。
不過沒關係,瀏覽器的資訊是通過headers
實現的,我們可以用urllib2設定瀏覽器資訊頭,把我們的程式偽裝成瀏覽器。
設定頭部驗證資訊
headers =
可以看到我們設定了user-agent
這個字段,並將其封裝為乙個字典headers
,後面我們會用到這個headers
。
重新構造請求,並列印獲取到的響應頁面的內容
request = urllib2.request(url,headers=headers)
可以發現我們在構造request時除了url引數,還將剛才封裝好的帶有瀏覽器資訊的headers
傳給了urllib2.request
的headers引數。
[!] 必須指定headers=headers
,否則會預設將headers傳遞給urllib2.request的第二個引數,但是第二個引數並非headers,如下:
>>> help("urllib2.request")
help on
class
request
in urllib2:
urllib2.request = class
request
| methods defined here:
| __getattr__(self, attr)
| __init__(self, url, data=none, headers={}, origin_req_host=none, unverifiable=false)
同樣的再重新請求頁面,獲取響應並列印出來
獲取成功!但是我們的漢字並沒有顯示出來。
這是因為我們獲取到的response.read()的編碼方式是utf-8的位元組流資料,而我們python2.7的預設編譯碼方式為ascii,從而導致了亂碼。
我們列印時指定解碼方式為utf-8試試看。
成功!至此我們獲取了完整的整個頁面資訊。
初探python之做乙個簡單小爬蟲
初探python,這個文章屬於自己的乙個總結。所以教程面向新手,無技術含量。python環境linux基本都有,windows下官網也提供了便利的安裝包,怎麼安裝配置網上有很多教程在此就不一一說明。我使用的python版本為python 3.6.4,後面的 也是基於python3的。做乙個小爬蟲離不...
乙個小爬蟲
usr bin env python coding utf 8 sina小爬蟲 site http 不能少哦 reptile sina reptitle site print getting the urls.n reptile sina.get urls site reptile sina.sto...
寫乙個爬蟲來獲取地鐵資訊資料
最近在知乎上看到一篇關於地鐵資料的分析,該篇文章很全面的分析了大陸 包括澳門香港 有地鐵城市的分布 線路 站點等資訊,很有閱讀價值。本篇文章是對該文中獲取資訊部分的乙個更進,使用物件導向的方法實現其部分功能。用python的物件導向方式實現目標,已做注釋,可供參考使用。本人技術有限,如有錯誤請指出。...