Python スクレイピング

Python requestsのエラー処理

投稿日:2017年11月13日 更新日:

requests.exceptions.SSLError: HTTPSConnectionPool

URLをクロールしていると、こんなエラーが出た。

File "/home/ty/projects/oldDomain/lib/python3.5/site-packages/requests/adapters.py", line 506, in send
 raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='publications.usa.gov', port=443): Max retries exceeded with url: /epublications/foia/foia.htm (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),))

 

SSLエラーのため、何回もリクエストをリトライしたが、上限回数に達した。
というエラーである。

対策1.SSLを有効にする設定をする

https://stackoverflow.com/questions/10667960/python-requests-throwing-up-sslerror

>>>requests.get(url, verify=True)

これでいけるらしい。

やってみたけどダメだった。

>>> requests.get("http://www.pueblo.gsa.gov/cic_text/fed_prog/foia/foia.htm",verify=True)
・・・
requests.exceptions.SSLError: HTTPSConnectionPool(host='publications.usa.gov', port=443): Max retries exceeded with url: /epublications/foia/foia.htm (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)'),))

対策2.キャッチして握りつぶす

あまりSSLを抜けようとこだわってるわけではないので、結局これにした。

>>> try: response=requests.get(startUrl,headers=headers) 
>>> except requests.exceptions.SSLError as e:
>>>    print("requests.getでSSLErrorエラーのため、スキップします.")

 

UnboundLocalError: local variable ‘response’ referenced before assignment

意味:変数’response’は、代入する前に参照されています。

修正前

try:
   response=requests.get(url,headers=headers)
except requests.exceptions.ConnectionError as e:
   print("wwwあり:ConnectionErrorエラーです.取得可能性あり.")

if response.status_code == requests.codes.ok:
   print("wwwあり:response.status_code = 200 OK")
   return True

修正後

try:
   response=requests.get(url,headers=headers)

   if response.status_code == requests.codes.ok:
      print("wwwあり:response.status_code = 200 OK")
      return True
except requests.exceptions.ConnectionError as e:
   print("wwwあり:ConnectionErrorエラーです.取得可能性あり.")

赤のif文の位置が悪かったんですね。修正前でexceptionが発生したときに、responseの中身が入ってないのに赤のif文のところでresponseを参照しいようとしているからエラーになっていました。

requests.exceptions.ChunkedEncodingError

requests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionResetError(104, 'Connection reset by peer')", ConnectionResetError(104, 'Connection reset by peer'))

同時にこんなのも出ている。

File "/usr/lib/python3.5/socket.py", line 575, in readinto
 return self._sock.recv_into(b)
ConnectionResetError: [Errno 104] Connection reset by peer
urllib3.exceptions.ProtocolError: ("Connection broken: ConnectionResetError(104, 'Connection reset by peer')", ConnectionResetError(104, 'Connection reset by peer'))

 

 

-Python, スクレイピング

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Python3 RecursionError: maximum recursion depth exceeded

再起処理の自作URLクローラーを夜回したら、朝起きたら落ちていた。   File “/usr/lib/python3.5/threading.py”, line 224, in __init …

no image

Ubuntu 16.04で pycharm でPython2 開発環境構築

no image

クローラーのUserAgent

Python Requests でのUserAgent指定方法 >>> url=”http://www.yahoo.co.jp/ >>> userAgent=”Mo …

no image

mecab

mecabとは? 自然言語処理ライブラリである。 形態素解析 与えられた文章を形態素という文章の最小単位に分解し、その最小単位の品詞や読みを判別すること。 公式ドキュメント MeCab: Yet An …

no image

python3のloggingを呼ぶための自作logger.pyは作るときにハマったこと

python3 の標準ログ出力モジュールであるlogging。 これを自作のlogger.pyにあるgetLoggerから返そうとした。 loggerの取得を共通関数化したかったからです。 すると、メ …