1

我正在尝试获取本网站图表中包含的数据。我使用 Firebug 找到了 json 的直接链接并使用了这个脚本(它适用于其他直接 json 链接)。应该返回的是一组时间戳和价格。

    import urllib2
    import simplejson
    req = urllib2.Request("http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=10350")
    opener = urllib2.build_opener()
    f = opener.open(req)
    h = simplejson.load(f)

运行此脚本返回urllib2.HTTPError: HTTP Error 403: Forbidden. 我可以使用 Firebug 手动获取数据,但我想使用脚本对多个数据集进行排序。有没有办法在不收到 HTTP 错误的情况下获取这些数据?

4

3 回答 3

2

该网站查找Referer标头并尝试确保请求来自其网页之一。这不是一个很好的安全措施,所以很容易绕过。

我现在有点懒,不想查找文档urllib2,所以这里有一个requests模块的解决方案:

import requests

url = 'http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=10350'
r = requests.get(url, headers={'Referer': 'www.grandexchangecentral.com'})

data = r.json
于 2012-10-30T03:47:28.430 回答
1

这是一个仅限 stdlib 的版本,只需按照@Blender 的建议添加标题:

import json
import urllib2

url = "http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=10350"
req = urllib2.Request(url, headers={'Referer': 'www.grandexchangecentral.com'})
page = urllib2.urlopen(req) # assume no multithreading
data = json.load(page) # assume utf-8 encoding
于 2012-10-30T04:27:07.323 回答
0

看起来你做不到。尝试访问该链接时,这是我得到的错误。

不允许更改。您可能正在尝试直接访问此页面。或者您的浏览器可能没有发送正确的推荐人信息。我们需要此信息来验证会员帐户编辑。请使用适当的会员编辑页面,或使用其他浏览器。

您将不得不让您的脚本伪造登录到该站点或使用标题。或者,您可以尝试询问网站所有者是否可以访问以提取他们的数据。

于 2012-10-30T03:26:40.953 回答