Python XHR请求URL在试图解析时表示不存在';内容

Python XHR请求URL在试图解析时表示不存在';内容,python,web-scraping,xmlhttprequest,python-requests,Python,Web Scraping,Xmlhttprequest,Python Requests,在我使用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'), 'is

在我使用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/
如果在googledeveloper工具的控制台中激活XHR日志,您可以看到XHR请求和服务器以字典形式发送的响应(这是预期的格式)

有人能告诉我为什么上面的代码没有返回我希望看到的数据吗


谢谢

您有几个问题:

  • url应该是
    http://www.whoscored.com/stageplayerstatfeed
  • 错误的
    GET
    参数
  • 缺少重要的必需标题
  • 您需要的是
    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,
        ...
    },
    ...
]

谢谢你,我希望它能起作用。我没有意识到,我必须将主地址后的url部分指定为特定参数,而不仅仅是控制台中显示的url部分。另外,您能解释一下“headers”中“User Agent”后面的三行是做什么的吗?谢谢…@user3045351当然,这些是我检查时浏览器发送的标题。你可以试着一个接一个地删除它们,看看代码是否中断——我认为至少有些代码不是必需的。谢谢