XHR 请求 URL 在尝试解析其内容时说不存在

Posted

技术标签:

【中文标题】XHR 请求 URL 在尝试解析其内容时说不存在【英文标题】:XHR request URL says does not exist when attempting to parse it's content 【发布时间】:2014-10-28 13:32:49 【问题描述】:

在我使用 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/

如果您在 Google Developer Tools 的控制台中激活 XHR 日志记录,您可以看到 XHR 请求和从服务器以字典形式发送的响应(这是预期的格式)。

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

谢谢

【问题讨论】:

【参考方案1】:

你有几个问题:

网址应该是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 当然,这些是我检查时浏览器发送的标头。您可以尝试将它们一一删除,看看代码是否中断 - 我认为至少其中一些不是真正需要的。谢谢。

以上是关于XHR 请求 URL 在尝试解析其内容时说不存在的主要内容,如果未能解决你的问题,请参考以下文章

ajax技术

CORS XHR 重定向不起作用

无法在 React Native 中获取或向 http URL 发出 XHR 请求(但 https 和 http://localhost 工作正常)

xhr如何获取百度百科的内容

xhr 向特定端口发送请求?

ajax请求本地md以及简单封装xhr ajax请求