1. 程式人生 > >python爬資料,天氣預報 返回403

python爬資料,天氣預報 返回403

爬資料的時候,一般網站獲取資料訪問的動態js檔案是可以直接訪問的,用普通

request = urllib.request.urlopen(url)
res = request.read()

就可以獲取

而有的不能直接獲取,返回403報錯,意思是訪問不到,

而這種明明有資料,伺服器就是不給你返回資料的連結,可以使用加headers的方式,模擬網頁環境


headers = {
	'Accept': '*/*',
	# 不要採用 gzip(壓縮格式),資料會變亂碼
	# 'Accept-Encoding': 'gzip, deflate',
	'Accept-Encoding': 'deflate',
	'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
	'Connection': 'keep-alive',
	'Host': 'd1.weather.com.cn',
	'Referer': 'http://www.weather.com.cn/weather40d/101110101.shtml',
	'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1'
}

這裡訪問的是中國天氣網的資料,

url=‘http://d1.weather.com.cn/calendar_new/2018/101110101_201806.html?_=1544002167834’

需要匹配的引數是headers中的Host和Referer

之後使用 

req = urllib.request.Request(url=url,data=None,headers=headers)
request = urllib.request.urlopen(url)
res = request.read()

就可以訪問了

當然,在訪問普通的url(無403錯誤)時,也可以加herders