Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从无法直接访问页面的网站检索json';不允许_Python_Json_Graph - Fatal编程技术网

Python 从无法直接访问页面的网站检索json';不允许

Python 从无法直接访问页面的网站检索json';不允许,python,json,graph,Python,Json,Graph,我正在试图获取上的图表中包含的数据。我使用Firebug查找到json的直接链接,并使用了这个脚本(可以在其他直接json链接上使用)。应该返回的是一组时间戳和价格 import urllib2 import simplejson req = urllib2.Request("http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=10350") opener = urllib2.buil

我正在试图获取上的图表中包含的数据。我使用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错误403:禁止
。我可以用Firebug手动获取数据,但我想用脚本对多个数据集进行排序。有没有一种方法可以在不接收HTTP错误的情况下获取此数据?

看起来您无法这样做。当尝试访问该链接时,这是我得到的错误

不允许更改。您可能正试图直接访问此页面。或者,您的浏览器可能无法发送正确的参考信息。我们需要此信息来验证成员帐户编辑。请使用正确的会员编辑页面,或使用其他浏览器


你要么要让你的脚本假装登录到该网站,要么玩标题。或者,您可以尝试询问网站所有者是否可以访问他们的数据。

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

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

import requests

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

data = r.json

这是一个仅适用于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

您可能需要设置正确的标题。您是否在访问此页面之前登录?您是否遵循Firebug中的特定路径?当我尝试手动打开它时,我收到的一条错误消息是“您可能正试图直接访问此页面”(正如@Blender所说,还有与用户帐户相关的文本)。我在登录网站时也会收到相同的错误。如果我所拥有的可能是错误的,我应该寻找什么样的标题?是的,我正沿着一条特定的路径,打开一个链接会返回你所说的。嗯。。。那么您通常按照什么步骤访问这些数据呢?我可以通过打开Firebug->Net,单击GET-gecgraphjson.php?jsid=10350并单击“Responses”或“Json”来手动查找。这两个对象都有相关的信息。直到最后一行,这一行给了我这个
AttributeError:“Response”对象没有属性“text”
。事实上,网站现在根本不允许我访问它,但是错误直到最后才会出现。你使用的是什么版本的请求?尝试
打印请求
并查看它返回的内容。0.8.2-1。我看看有没有新的。我知道了。我现在访问该站点时出错(这是由于太多直接请求造成的)。我将升级请求并尝试您的两个建议。谢谢你的帮助!没问题。这段代码对我适用,所以我认为一旦他们的服务器停止阻止您的请求,它就不应该对您有任何不同。