爬蟲初探,獲取乙個頁面

2021-08-02 23:58:06 字數 3225 閱讀 1386

環境

[!] 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的物件導向方式實現目標,已做注釋,可供參考使用。本人技術有限,如有錯誤請指出。...