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のお勉強

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

no image

Python BeautifulSoupメモ

BeautifulSoupとは? Python pipでパッケージ管理されている。HTMLを容易に解析する機能提供する。 BeautifulSoup import宣言 from bs4 import …

no image

URLの構造

http://hoge.sample.com/category/diet?q=drink#ojousama スキーム scheme httpやhttpsのようにプロトコルを表す オーソリティ auth …

no image

lxml.etree.ParserError: Document is empty

lxml.etree.ParserError: Document is empty が出た。このとき。 response=requests.get(”https://discussions.apple …

no image

Pythonの文法

1行に1文だけ書いていく。 文字列は\”又は\’で囲む 例) urlopen(‘http://www.yahoo.com/’) 例) urlopen(& …