2016-05-03 16 views
0

私はpythonクローラを書くとき、私はしばしばurlopenを使います。時にはURLを開くことができません(私はエラーが発生します)。しかし、このURLを開くために再試行すると、成功します。だから私はこのように私のクローラを書き込むことによって、この状況に対処:pythonクローラーのurlopenエラーを処理する方法は?

def url_open(url): 
'''open the url and return its content''' 
req = urllib.request.Request(headers=header, url=url) 
while True: 
    try: 
     response = urllib.request.urlopen(req) 
     break 
    except: 
     continue 
contents = response.read().decode('utf8') 
return contents 

ので、これを行うには、いくつかのエレガントな方法があり、私はこのコードが醜いだと思う...しかし、それは動作しますか?

答えて

0

requestsライブラリを使用することを強くおすすめします。あなたは同じ問題に終わるかもしれませんが、要求がより簡単になり、信頼性も高くなっています。

同じ要求は、あなたがどのようなエラーを取得しているこの

def url_open(url): 
    while True: 
     try: 
      response = requests.get(url, headers=header) 
      break 
     except: 
      continue 
return response.text 

のように行きますか?

+0

私はそれは、そのエラーコードは1から始めます正確に何を覚えてカント。 – alexxx

0

リトライ回数を明示的に設定できるように、セッションAPIとアダプタAPIを使用してリクエストAPIを使用することをお勧めします。これは、より多くのコードですが、それは間違いなくきれいです:

import requests 
session = requests.Session() 
http_adapter = requests.adapters.HTTPAdapter(max_retries=3) 
https_adapter = requests.adapters.HTTPAdapter(max_retries=3) 
session.mount('http://', http_adapter) 
session.mount('https://', https_adapter) 
response = s.get(url) 
if response.status_code != 200 then: 
    # Handle the request failure here 
    pass 
関連する問題