XHR请求URL显示不存在时尝试解析其内容
在我用Scrapy构建完整解决方案之前,我先发一个简单版本,说明我想做的事情:
import requests
url = 'http://www.whoscored.com/stageplayerstatfeed/?field=1&isAscending=false&orderBy=Rating&playerId=-1&stageId=9155&teamId=32"'
params = {'d': date.strftime('%Y%m'), 'isAggregate': 'false'}
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}
response = requests.get(url, params=params, headers=headers)
fixtures = response.body
#fixtures = literal_eval(response.content)
print fixtures
这段代码的意思是,上面的URL不存在。这个URL和一个XHR请求有关,当你在这个页面的主表格中从“总体”标签切换到“首页”标签时,就会提交这个请求:
http://www.whoscored.com/Teams/32/
如果你在谷歌开发者工具的控制台中开启XHR日志记录,你就可以看到这个XHR请求和服务器返回的响应,返回的数据是以字典的形式呈现的(这是我们期待的格式)。
有没有人能告诉我,为什么上面的代码没有返回我预期看到的数据?
谢谢
1 个回答
10
你遇到了几个问题:
- 网址应该是
http://www.whoscored.com/stageplayerstatfeed
- 请求的参数不对
- 缺少一些重要的必要头信息
- 你需要用
response.json()
,而不是response.body
修正后的版本:
import requests
url = 'http://www.whoscored.com/stageplayerstatfeed'
params = {
'field': '1',
'isAscending': 'false',
'orderBy': 'Rating',
'playerId': '-1',
'stageId': '9155',
'teamId': '32'
}
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Host': 'www.whoscored.com',
'Referer': 'http://www.whoscored.com/Teams/32/'}
response = requests.get(url, params=params, headers=headers)
fixtures = response.json()
print fixtures
输出结果:
[
{
u'AccurateCrosses': 0,
u'AccurateLongBalls': 10,
u'AccuratePasses': 89,
u'AccurateThroughBalls': 0,
u'AerialLost': 2,
u'AerialWon': 4,
...
},
...
]