我正在尝试使用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
所以,我可以连接到代理,但找不到东西。
答案 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)
如果仍然出现连接错误,您可以尝试以下几个步骤:
尝试从解释器(交互模式)urlopen()随机站点。如果你能够获取源代码,那就很好。如果没有检查互联网条件或尝试请求模块。 Check here
检查并查看URL中的json是否使用了正确的语法。对于示例json语法检查here
尝试使用simplejson模块。
编辑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的方法。但希望它会指出你正确的方向。