为什么这个简单的Python代码不起作用?
import urllib
file = urllib.urlopen('http://www.google.com')
print file.read()
这是我得到的错误:
Traceback (most recent call last):
File "C:\workspace\GarchUpdate\src\Practice.py", line 26, in <module>
file = urllib.urlopen('http://www.google.com')
File "C:\Python26\lib\urllib.py", line 87, in urlopen
return opener.open(url)
File "C:\Python26\lib\urllib.py", line 206, in open
return getattr(self, name)(url)
File "C:\Python26\lib\urllib.py", line 345, in open_http
h.endheaders()
File "C:\Python26\lib\httplib.py", line 892, in endheaders
self._send_output()
File "C:\Python26\lib\httplib.py", line 764, in _send_output
self.send(msg)
File "C:\Python26\lib\httplib.py", line 723, in send
self.connect()
File "C:\Python26\lib\httplib.py", line 704, in connect
self.timeout)
File "C:\Python26\lib\socket.py", line 514, in create_connection
raise error, msg
IOError: [Errno socket error] [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
我已经尝试了几个不同的页面,但我永远无法正确执行urlopen
方法。
答案 0 :(得分:4)
您的代码不是问题所在。
您的IE中是否有任何代理设置?
这表示urllib.urlopen的python文档:
“”“
在Windows环境中,如果未设置代理环境变量,则
代理设置是从注册表的Internet设置获得的
节。
“”“
答案 1 :(得分:3)
如果可以更改某些代码行,请尝试使用urllib2。以秒为单位设置超时参数
例如:
urllib2.urlopen(http://www.abc.com/api, timeout=20)
此处连接持续时间较长。因此,例如,如果您正在读取太大的XML文件,则会避免不完整的读取。
如果网络连接速度很慢或突然中断,上述代码将永远无法运行。
答案 2 :(得分:1)
如果您有wireshark,请检查发送的内容以及是否有任何回复。如果您可以看到正在发送的GET请求,它将帮助您调试问题。
我还记得有类似这样的问题一次,我做的是刷新我的DNS缓存
(ipconfig / flushdns)并重新启动。它解决了我的问题。尝试我猜不会有什么坏处。
答案 3 :(得分:0)
对于python 3:
import urllib.request
proxies=urllib.request.ProxyHandler({'http':None})
opener=urllib.request.build_opener(proxies)
urllib.request.install_opener(opener)
j=urllib.request.urlopen(url="https://google.com")
k=j.read()
print(k)
答案 4 :(得分:0)
您的代码是正确的
import urllib
file = urllib.urlopen('http://www.google.com')
print file.read()
但很可能是你的网络有问题或者你没有设置 dns 正确。
您可以使用 urllib 的请求库。