Python爬蟲入門四urllib庫的高階用法

2021-10-13 17:15:53 字數 3384 閱讀 5871

有些**不會同意程式直接用上面的方式進行訪問,如果識別有問題,那麼站點根本不會響應,所以為了完全模擬瀏覽器的工作,我們需要設定一些 headers 的屬性。 首先,開啟我們的瀏覽器,除錯瀏覽器 f12,開啟network,點登入之後,我們會發現登陸之後介面都變化了,出現乙個新的介面,實質上這個頁面包含了許許多多的內容,這些內容也不是一次性就載入完成的,實質上是執行了好多次請求,一般是首先請求 html 檔案,然後載入 js,css 等等,經過多次請求之後,網頁的骨架和肌肉全了,整個網頁的效果也就出來了

拆分這些請求,我們只看一第乙個請求,你可以看到,有個 request url,還有 headers,下面便是 response,顯示得不全,小夥伴們可以親身實驗一下。那麼這個頭中包含了許許多多是資訊,有檔案編碼啦,壓縮方式啦,請求的 agent 啦等等。 其中,agent 就是請求的身份,如果沒有寫入請求身份,那麼伺服器不一定會響應,所以可以在 headers 中設定 agent, 例如下面的例子,這個例子只是說明了怎樣設定的 headers,小夥伴們看一下設定格式就好。

import urllib  

import urllib2

url =

''user_agent =

'mozilla/4.0 (compatible; msie 5.5; windows nt)'

values =

headers =

data = urllib.urlencode(values)

request = urllib2.request(url, data, headers)

response = urllib2.urlopen(request)

page = response.read(

)

這樣,我們設定了乙個 headers,在構建 request 時傳入,在請求時,就加入了 headers 傳送,伺服器若識別了是瀏覽器發來的請求,就會得到響應。 另外,我們還有對付」 防盜煉」 的方式,對付防盜煉,伺服器會識別 headers 中的referer是不是它自己,如果不是,有的伺服器不會響應,所以我們還可以在 headers 中加入 referer 例如我們可以構建下面的 headers

headers =

同上面的方法,在傳送請求時把 headers 傳入 request 引數裡,這樣就能應付防盜煉了。 另外 headers 的一些屬性,下面的需要特別注意一下:

其他的有必要的可以審查瀏覽器的 headers 內容,在構建時寫入同樣的資料即可。

urllib2 缺省會使用環境變數 http_proxy 來設定 http proxy。假如乙個**它會檢測某一段時間某個 ip 的訪問次數,如果訪問次數過多,它會禁止你的訪問。所以你可以設定一些**伺服器來幫助你做工作,每隔一段時間換乙個**,**不知道是誰在搗鬼了, 下面一段**說明了**的設定用法

import urllib2

enable_proxy =

true

proxy_handler = urllib2.proxyhandler(

)null_proxy_handler = urllib2.proxyhandler(

)if enable_proxy:

opener = urllib2.build_opener(proxy_handler)

else

: opener = urllib2.build_opener(null_proxy_handler)

urllib2.install_opener(opener)

# urllib2.proxyhandler

# urllib2.build_opener

# urllib2.install_opener

proxies =

response = urllib.urlopen(url, proxies=proxies)

content = response.read(

)

上一節已經說過 urlopen 方法了,第三個引數就是 timeout 的設定,可以設定等待多久超時,為了解決一些**實在響應過慢而造成的影響。 例如下面的**,如果第二個引數 data 為空那麼要特別指定是 timeout 是多少,寫明形參,如果 data 已經傳入,則不必宣告。

import urllib2

response = urllib2.urlopen(

'', timeout=

10)

http 協議有六種請求方法,get,head,put,delete,post,options,我們有時候需要用到 put 方式或者 delete 方式請求

如果要使用 http put 和 delete ,只能使用比較低層的 httplib 庫。

可以通過下面的方法把 debug log 開啟,這樣收發包的內容就會在螢幕上列印出來,方便除錯,這個也不太常用,僅提一下

效果

..以上便是一部分高階特性,前三個是重要內容,在後面,還有 cookies 的設定還有異常的

Python網路爬蟲入門(四)

beautifulsoup庫 from bs4 import beautifulsoup html soup beautifulsoup html,lxml 列印所有的tr標籤 trs soup.find all tr for tr in trs print tr 獲取第二個tr標籤 tr soup...

python爬蟲入門(四)利用多執行緒爬蟲

先回顧前面學過的一些知識 1.乙個cpu一次只能執行乙個任務,多個cpu同時可以執行多個任務 2.乙個cpu一次只能執行乙個程序,其它程序處於非執行狀態 3.程序裡包含的執行單元叫執行緒,乙個程序可以包含多個執行緒 4.乙個程序的記憶體空間是共享的,每個程序裡的執行緒都可以使用這個共享空間 5.乙個...

Python爬蟲入門

今天看了菜鳥教程的python教程,準備做個小作業寫個爬蟲程式。其中主要涉及到基本語法 正規表示式 urllib和re兩個模組。import urllib 載入模組 import re defgethtml url page urllib.urlopen url html page.read ret...