時間:2020-10-06來源:www.outletmksalestore.com作者:電腦系統城
對于請求一些網站,我們需要加上請求頭才可以完成網頁的抓取,不然會得到一些錯誤,無法返回抓取的網頁。下面,介紹兩種添加請求頭的方法。
方法一:借助build_opener和addheaders完成
?1 2 3 4 5 6 7 8 9 |
import urllib.request url = "http://www.meizitu.com" #注意:在urllib 中headers是元組 headers = ( "User-Agent" , "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE" ) opener = urllib.request.build_opener() opener.addheaders = [headers] data = opener. open (url) print (data.read()) |
注意:此處的headers要寫為一個元組類型才可以。寫為字典類型的話會報錯!
方法二、創建一個Request實例對象
?1 2 3 4 5 6 7 8 9 10 |
# 案例1 import urllib.request url = "http://www.meizitu.com" #注意:在urllib 中這種的headers 是需要是字典的 headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE" } req = urllib.request.Request(url = url,headers = headers) file = urllib.request.urlopen(req) #出現有些解碼錯誤的話,加上“ignore”就可以啦 print ( file .read().decode( "utf-8" , 'ignore' )) |
注意:此處的headers要寫為一個字典類型才可以。
創建一個Reques對象,把需要的headers,url,proxy 都放進去,或者在post 請求中還可以把編碼過后的data 值放進去,再用urlopen 打開,就比較方便了。
另外,這種方法還可以用add_headers()來添加headers,代碼如下:
?1 2 3 4 5 6 7 8 9 10 11 |
import urllib.request try : url = "http://www.meizitu.com" req = urllib.request.Request(url = url) req.add_header( "User-Agent" , "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE" ) file = urllib.request.urlopen(req,timeout = 10.1 ) print ( file .read().decode( "utf-8" , 'ignore' )) except Exception as e: print ( "時間超時" , str (e)) |
總結:通過以上兩種方法,可以完成請求頭的相關參數設置,但是得注意headers是用字典類型來傳入還是元組類型。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
2022-03-01
PHP如何從txt文件中讀取數據詳解2022-03-01
分享5個方便好用的Python自動化腳本2021-03-29
Python中pycharm編輯器界面風格修改方法