Python urllib2.urlopen bug: 超时错误导致我的网络连接中断?
我不知道自己是不是做错了什么,但我百分之百确定是这个Python脚本导致我的网络连接出问题。
我写了一个Python脚本,用来抓取成千上万个文件的头部信息,主要是获取内容长度,以便准确知道每个文件的大小,使用的是HEAD请求。
示例代码:
class HeadRequest(urllib2.Request):
def get_method(self):
return "HEAD"
response = urllib2.urlopen(HeadRequest("http://www.google.com"))
print response.info()
问题是,运行了几个小时后,脚本开始出现urlopen错误,提示超时,从那时起我的网络连接就断了。而且每次我关闭这个脚本后,网络连接都会立刻恢复。起初我以为可能是网络不稳定,但经过几次运行后,发现问题确实出在脚本上。
我不知道为什么,这应该算是个bug吧?还是说我的网络服务提供商因为我做这些事情而封锁了我?(我已经设置程序每次请求等待10秒了)
顺便问一下,我在使用VPN,这会有关系吗?
2 个回答
“脚本开始出现 urlopen 错误,超时了。”
我们连猜都不知道该怎么猜。
你需要在你的电脑上收集一些数据,并把这些数据放到你的问题里。
找另一台电脑,运行你的脚本。看看那台电脑的网络连接是不是也被阻止了?还是可以正常使用?
如果两台电脑都被阻止,那就不是你的软件问题,而是你的网络服务提供商的问题。更新你的问题,把这些信息和你是怎么得知的都写上。
如果只有运行脚本的那台电脑出现问题,那就不是网络服务提供商的问题,而是你的操作系统资源耗尽了。这种情况比较难诊断,因为可能是内存、套接字或文件描述符的问题。通常是套接字的问题。
你需要找到一些适合你操作系统的 ifconfig/ipconfig 诊断软件。你还需要更新你的问题,明确说明你使用的是什么操作系统。然后用这些诊断软件查看一下系统中有多少个打开的套接字在占用资源。
我猜要么是你的网络服务提供商(ISP)或者VPN服务商因为你产生了大量可疑的流量而限制了你的连接,要么是你的路由器或者VPN通道因为有很多未完全打开的连接而变得拥堵。其实,普通家庭的网络并不适合用来做爬虫这类活动。