比如这个页面: http://m.weather.com.cn/maqi/101020100.shtml
json 格式数据类似: http://d1.weather.com.cn/aqi_7d/XiangJiAqiFc5d/101020100.html
整个 Request Headers(Referer, cookie 之类)完全设了还是返回 403,请教一下问题出在哪里
1
zhihaofans 2017-08-10 18:02:00 +08:00 via Android
ua
|
2
mrl1996 2017-08-10 18:02:55 +08:00
要我说还是换个爬取
|
3
visitantzj OP @zhihaofans
也设了,chrome 里正常访问的 request header 我都给弄了进去,还是不行 {'Host': 'd1.weather.com.cn', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'Accept': '*/*'', 'Referer': 'http://m.weather.com.cn/mweather/101020100.shtml', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Cookie': 'BIGipServerd1src_pool=1874396221.20480.0000'} |
4
lxml 2017-08-10 18:13:39 +08:00 1
```
import requests cookies = { # 自己填写 } headers = { 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.8', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', 'Accept': '*/*', 'Referer': 'http://m.weather.com.cn/maqi/101020100.shtml', 'Connection': 'keep-alive', } params = ( ('_', '14483821791309'), ) a = requests.get('http://d1.weather.com.cn/aqi_all/101020100.html', headers=headers, params=params, cookies=cookies) a.encoding = 'utf-8' print(a.text) ``` 刚刚用 curl 生成了一份代码,实测是可以的,你可能是没带 cookie ? |
5
q409195961 2017-08-10 18:16:14 +08:00
带上 Referer: http://m.weather.com.cn/maqi/101020100.shtml
就不会 403 |
6
visitantzj OP @lxml 感谢老兄!
看来应该是 cookie 的问题,我这写法里 urllib.request.Request 应该是没把 cookie 传递出去。非常感谢!知道大方向自己就好去 google 了 url = r"http://d1.weather.com.cn/aqi_7d/XiangJiAqiFc5d/101020100.html" headers = { 'Host': 'd1.weather.com.cn', 'Connection': 'keep-alive', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'Accept': '*/*', 'Referer': 'http://m.weather.com.cn/maqi/101020100.shtml', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Cookie': 'f_city=%E9%95%87%E6%B1%9F%7C101190301%7C; BIGipServerd1src_pool=1874396221.20480.0000' } req = urllib.request.Request(url= url, headers=headers) resp = urllib.request.urlopen(url) respBytes = resp.read() html = respBytes.decode('utf-8') |
7
visitantzj OP @q409195961 不好意思,这个是开始试另一个页面时候的 url 没改过来,我感觉应该是像楼上说的是 cookie 问题……自己先研究一下先
|
8
q409195961 2017-08-10 18:33:22 +08:00 1
@visitantzj 如图
![image]( https://i.loli.net/2017/08/10/598c3642cffd6.png) [img]https://i.loli.net/2017/08/10/598c3642cffd6.png[/img] <img src="https://i.loli.net/2017/08/10/598c3642cffd6.png"/> (PS:试一下哪种方式可以插图) |
9
RorschachZZZ 2017-08-10 18:40:06 +08:00
不用爬吧,现在好多免费 api 接口
|
10
visitantzj OP @q409195961
正无地自容中……其实问题很无厘头 resp = urllib.request.urlopen(**url**)里 url 忘记改成 req 了 @RorschachZZZ 感觉天气网的数据比较正规点,其实原先也有 api 的,估计后来用的人多就关了 |
11
yefuchao 2017-08-10 19:20:08 +08:00
|
12
t123yh 2017-08-10 20:02:45 +08:00 via Android
用彩云天气的免费接口呀
|
13
Bijiabo 2017-08-10 20:04:22 +08:00
楼主的需求是为了天气数据吧?可以找免费的 API 接口,感觉彩云天气的就不错
|
14
jingniao 2017-08-10 20:39:23 +08:00 via Android
这叫我想起来大学一门课程结课作业做的一个简单的安卓天气了,当时做的很烂很烂……
|
15
xd314697475 2017-08-10 20:58:31 +08:00
|
16
wencan 2017-08-11 16:41:53 +08:00
以前我用的中国天气网开放平台的接口 openweather.weather.com.cn 已经不可访问了
现在中国天气网整了个智慧气象服务 不知道是不是升级版 http://smart.weather.com.cn/ |