2017-04-23 11 views
0

私は約3000のURLを持っています。私は美味しいスープを試してみましたが、いくつかのエラーが出て混乱しています。私がしたいのは、すべての内部サーバーエラーURLを無視し、エラーがなく、以下のコードで書かれたテキストをフェッチするだけのものです。Pythonとバイパスのエラーでウェブを掻く方法

マイコード:

mega = [[]] # list in a list 
for i in range(len(ab)): # ab as a dictionary with multiple keys 
...  myurl = soc[i]['the_urls'] 
...  html = urllib2.urlopen(myurl).read() 
...  soup = BeautifulSoup(html, "html.parser") 
...  row = soup.findAll('tr') 
...  for r in row: 
...   mega.append([r.get_text()]) # scrape all the texts 

エラー:

Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
    File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 154, in urlopen 
    return opener.open(url, data, timeout) 
    File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 435, in open 
    response = meth(req, response) 
    File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 548, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 473, in error 
    return self._call_chain(*args) 
    File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 407, in _call_chain 
    result = func(*args) 
    File "/Users/name/anaconda/lib/python2.7/urllib2.py", line 556, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 500: Internal Server Error 

エラーは、すべてのURLが同じ問題があることを意味しています - 内部サーバーエラーが?この場合、私ができる方法の1つは、httpエラー500がなくても試してみるtryとexceptブロックを含めることです。

編集:

私は「合格」または「継続」は正しいことやっている場合は特に、エラーを回避するために、次のコードを使用してみました、私はそれが動作しているかわからない:

for i in range(len(soc)): 
...  myurl = soc[i]['report_url'] 
...  while True: 
...   try: 
...    html = urllib2.urlopen(myurl).read() 
...    break 
...   except urllib2.HTTPError: 
...    continue 
...  soup = BeautifulSoup(html, "html.parser") 
...  row = soup.findAll('tr') 
...  for r in row: 
...   mega.append([r.get_text()]) # scrape the text 
+0

いいえ、実際には、1つのURLが500エラーを返したことを意味します。それを処理するには 'try' /' except'を使うべきです。 –

+0

上記のコメントのコードは読めません。 –

+0

あなたの編集は、呼び出しが成功するまでループします。永遠になる可能性があります。 @KlausD。 –

答えて

0

Does the error mean that all the urls have the same problem - internal server error?

必ずしもそうではありません。 - とサイト上のすべてのページは、特定のページにいくつかのエラーは、例えば、DivisionByZeroが、その特定のデータ を計算しながら

  • アクセスできなくなります

    • インフラが失敗します。5XXサーバーエラーの理由は、可能性があるため

      try/exceptを使用して問題を処理し、次のURLに進みます。

      また、いくつかのタイプの統計を作成して、一部のドメインで多くのエラーが発生した場合は、現在動作していないと推測し、そのURLをリストの一番下に移動します。

    +0

    こんにちは、tryとexceptを使用する感覚がありますが、私のコードが動作しているかどうかはわかりません。私はいくつかの編集を行いました。ありがとう。 – song0089

    +0

    URLの1つに永続的にアクセスできない場合、そのURLにロックされる可能性があります。別の方法を試すことができます:1つのURLが機能していない場合は、URLのリスト全体を移動します。リストの最後に移動して次のURLに移動します。プロセス全体を数回== 'MAX_ATTEMPS'繰り返します。 また、データの解析に関する大きな計画がある場合は、https://scrapy.org/をご覧ください。それは非常に迅速に複雑なグラバーを書くことができます。たとえば、 - https://gist.github.com/lisitsky/c4aac52edcb7abfd5975be067face1bb - Weblancerサイトを16スレッドで解析し、数秒後に4k行のCSVを返します。 –

    関連する問題