2013-11-28 62 views
1

我正在使用第三方服务填充本地数据库。我有一个网站列表(约500)。我在循环中调用每个url,并用返回的数据更新我的数据库。该码流是这样的:随机“[Errno -2]名称或服务未知”错误

for url in urllist: 
    req = urllib.urlopen(url) 
    data = json.loads(req.read()) 
    req.close() 

    #update the db using data here 

每当我运行这段代码,脚本在与错误消息“不知道名称或服务”随机点失败。这与网址没有任何关系,因为脚本在随机点失败(即在一次运行中第50次迭代,在另一次运行中第60次迭代)

这可能是什么原因?

+1

我想我会把每个调用到自己的线程。我想象一下,如果你得到了可变的错误,那是因为你的网络在不同的时间拥挤。 – hyleaus

+1

检查您的代理或防火墙 – sheh

+0

这些请求同步工作,并在开始下一个请求之前关闭每个请求。这仍然是关于网络拥塞吗? –

回答

2

如果使用错误的代理或存在其他网络问题,你可以试试这个:

for url in urllist: 
    retry = 0 
    while True: # retry request 
     try: 
      req = urllib.urlopen(url) 
      resp_data = req.read() # in call read() network still processing 
     except Exception as e: # TODO need more detailed handling 
      if retry > 3: # 3 this is serious problem. exit 
       raise e 
      retry += 1 # retry 
     else: 
      data = json.loads() 
      req.close() # not needed 
      break 
+0

是的,我可以尝试这一个,但我想找到问题的原因并解决它。任何想法如何可以看到它是代理相关还是其他? –

+0

如果您使用不受信任的代理服务器,您可能会收到许多各种错误,并且无法修复它们。我有类似的经历。我有30%的错误是5种不同的类型。 – sheh

+1

作为hack你可以添加暂停在1-3秒之间请求 – sheh

相关问题