版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq983392709/article/details/84846612
爬数据的时候,一般网站获取数据访问的动态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