02Python爬蟲---瀏覽器的模擬Headers屬性
阿新 • • 發佈:2019-01-23
import urllib.request #匯入包
使用urlopen()訪問有些網站時會出現403錯誤,禁止訪問的錯誤,這就需要爬蟲模擬成瀏覽器
一、使用build_opener()修改報頭
1、注意urlopen()不支援一些HTTP的高階功能,所以使用urllib.request.build_opener()
url = "http://blog.csdn.net/a877415861/article/details/78838301"
# 定義headers儲存對應的User-Agent資訊,定義格式為("User-Agent",具體資訊)
headers = ('User-Agent' , 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.3831.602 Safari/537.36')
# 建立自定義的opener
opener = urllib.request.build_opener()
# 物件名.addheaders = [頭資訊] ,設定對應的報頭
opener.addhandlers = [headers]
# (1)opener 物件名.open( url 地址) (2)開啟網址後,再read()方法讀取對應資料
data = opener.open(url).read()
print("網頁:%s"%(data))
2、將爬取到的網頁寫入檔案
fhandle = open("/home/zyb/crawler/myweb/part4/3.html", "wb")
fhandle.write(data) # 把資料寫入3.html內
fhandle.close() # 關閉
二、使用add_header()新增報頭
url = "http://blog.csdn.net/a877415861/article/details/78838301"
# 使用urllib.request.Request(url) 建立Request物件
req = urllib.request.Request(url)
# 使用add_header()方法新增對應的報頭資訊,格式為:Request 物件名.add_header(欄位名, 欄位值)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.3831.602 Safari/537.36')
# 成功設定好報頭,使用urlopen()開啟對應的網址
data = urllib.request.urlopen(req).read()
print("網頁:%s"%(data))
三、注意
兩種方法都可以實現報頭的新增,只是新增保溫的方法不同,值得注意的是,方法1中使用的是addheaders()方法,方法二中使用的是add_header()方法,注意末尾有誤s以及有誤下劃線的區別