標籤:col except cep 開啟 5.0 群組類型 post urlopen user
2018-08-23 13:07:57
對於請求一些網站,我們需要加上要求標頭才可以完成網頁的抓取,不然會得到一些錯誤,無法返回抓取的網頁。下面,介紹兩種添加要求標頭的方法。
方法一:藉助build_opener和addheaders完成
1 import urllib.request2 url="http://www.meizitu.com"3 #注意:在urllib 中headers是元組4 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")5 6 opener=urllib.request.build_opener()7 opener.addheaders=[headers]8 data=opener.open(url)9 print(data.read())
注意:此處的headers要寫為一個元群組類型才可以。寫為字典類型的話會報錯!
方法二、建立一個Request執行個體對象
1 # 案例1 2 import urllib.request 3 url="http://www.meizitu.com" 4 #注意:在urllib 中這種的headers 是需要是字典的 5 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"} 6 req=urllib.request.Request(url=url,headers=headers) 7 file=urllib.request.urlopen(req) 8 9 #出現有些解碼錯誤的話,加上“ignore”就可以啦10 print(file.read().decode("utf-8",‘ignore‘))
- 注意:此處的headers要寫為一個字典類型才可以。
- 建立一個Reques對象,把需要的headers,url,proxy 都放進去,或者在post 請求中還可以把編碼過後的data 值放進去,再用urlopen 開啟,就比較方便了。
另外,這種方法還可以用add_headers()來添加headers,代碼如下:
1 import urllib.request 2 try: 3 url="http://www.meizitu.com" 4 5 req=urllib.request.Request(url=url) 6 7 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") 8 file=urllib.request.urlopen(req,timeout=10.1) 9 10 print(file.read().decode("utf-8",‘ignore‘))11 except Exception as e:12 print("時間逾時",str(e))
總結:通過以上兩種方法,可以完成要求標頭的相關參數設定,但是得注意headers是用字典類型來傳入還是元群組類型。
01-urllib庫添加headers的一般方法