背景
題名の通り。結構ググっても、日本語でも英語でもなかなか解決方法見つからなかったので、再発時に参照できるようメモ
エラーが発生したコード
実際はwikipediaではないけど、https://~
のサイトをスクレイピングした際に発生した。
今触ってるPCだと、そのサイトが対象でもエラー出ずにスクレイピングできる。なぜだ・・・環境の問題?
import requests
url = 'https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8'
response = requests.get(url)
result = response.text
print(result)
そのときのエラーメッセージは控えられてないけど、SSLError
でbad handshake
という単語が含まれてたのは覚えてる
対処法
verify=False
作戦は使いたくなかったので色々調べ倒したところ、urllib
とssl
を使ったらエラー発生せずにスクレイピングできた。
ココさえ乗り越えれば、あとはBeaurifulSoup4使って欲しい要素だけ抜き出せばOK
import urllib.request
import ssl
url = 'https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8'
context = ssl.SSLContext()
req = urllib.request.Request(url=url)
with urllib.request.urlopen(req, context=context) as f:
result = f.read().decode()
print(result)