python爬資料,天氣預報 返回403
阿新 • • 發佈:2019-01-10
爬資料的時候,一般網站獲取資料訪問的動態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