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以及有誤下劃線的區別