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 RotatingFileHandlerでログファイルサイズを抑えて世代管理

RotatingFileHandlerは何世代までローテーションできる? RotatingFileHandlerは何世代でもローテ―ションできるようです。 args=(“log/app.log”, ‘ …

no image

Ubuntu16.04にPython3環境を構築する

Ubuntu16.04をインストールしたら、この順でやっていこう。 1.aptのパッケージリスト最新化 $ sudo apt update   2.Python3の最新化 $ sudo ap …

no image

【Python クローリング&スクレイピング】を読んで

紀伊国屋で買いました。 カバー外してます。 クローリングフレームワーク lxml Beautiful Soup Scrapy クローリング→データ収集 スクレイピング→収集したものからデータ抽出するこ …

no image

取得可能ドメイン・ドメイン取得可否のrequests.response.http_status_code

取得可能なドメインは2種類ある。 期限切れのドメイン(中古ドメイン) 全く新規のドメイン それぞれ、どのようなrequests.response.http_status_codeを返すのだろうか。下記 …

no image

Python3のお勉強

環境構築・Pythonのインストール PythonでHello World! 引数を与えてPythonスクリプトを実行する Pythonの文法 付録 Pythonコマンド 1.環境構築・Pythonの …