如何在Python中从URL读取JSON?

时间:2015-10-26 10:34:22

标签: python json urllib2 urllib

我正在尝试使用Python从Web获取JSON文件。如果我在浏览器中打开URL(Mozilla或Chromium),我会看到JSON。但是,当我使用Python执行以下操作时:

response = urllib2.urlopen(url)
data = json.loads(response.read())

我收到一条错误消息,告诉我以下内容(英文翻译后):Errno 10060,连接错误,因为服务器在一段时间后没有反应,或连接错误,或主机没有反应。

ADDED

看起来很多人都面临着所描述的问题。类似(或相同)问题也有一些答案。例如here我们可以看到以下解决方案:

import requests

r = requests.get("http://www.google.com", proxies={"http": "http://61.233.25.166:80"})
print(r.text)

这对我来说已经向前迈进了一步(我认为代理很可能是问题的原因)。但是,我仍然没有完成它,因为我不知道我的代理的URL,我可能需要用户名和密码。我怎么能找到它们?我的浏览器是如何实现的呢?不是吗?

已添加2

我想我现在更进了一步。我使用此网站了解我的代理是什么:http://www.whatismyproxy.com/

然后我使用了以下代码:

proxies = {'http':'my_proxy.blabla.com/'}
r = requests.get(url, proxies = proxies)
print r

结果我得到了

<Response [404]>

看起来不太好,但至少我认为我的代理是正确的,因为当我随机更改代理的地址时,我得到另一个错误:

Cannot connect to proxy

所以,我可以连接到代理,但找不到东西。

1 个答案:

答案 0 :(得分:0)

当你试图从在线资源(URL)获取json时,我认为可能有问题。为了清楚起见,这里有一个小代码片段

#!/usr/bin/env python

try:
    # For Python 3+
    from urllib.request import urlopen
except ImportError:
    # For Python 2
    from urllib2 import urlopen

import json

def get_jsonparsed_data(url):
    response = urlopen(url)
    data = str(response.read())
    return json.loads(data)

如果仍然出现连接错误,您可以尝试以下几个步骤:

  1. 尝试从解释器(交互模式)urlopen()随机站点。如果你能够获取源代码,那就很好。如果没有检查互联网条件或尝试请求模块。 Check here

  2. 检查并查看URL中的json是否使用了正确的语法。对于示例json语法检查here

  3. 尝试使用simplejson模块。

  4. 编辑1: 如果要使用系统范围的代理访问网站,则必须使用代理处理程序来使用环回(本地主机)连接到该代理。示例代码如下所示。

    proxy = urllib2.ProxyHandler({
        'http': '127.0.0.1',
        'https': '127.0.0.1'
    })
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)
    # this way you can send both http and https request using proxies
    urllib2.urlopen('http://www.google.com')
    urllib2.urlopen('https://www.google.com')
    

    我对ProxyHandler的工作并不多。我只知道理论和代码。我相信有更好的方法可以通过代理访问网站;每次运行程序时都不涉及安装opener的方法。但希望它会指出你正确的方向。