python初学者です。
Googleニュースから全ての<a></a>タグを読み取り、リンク先の全ての記事を取得するウェブスクレイパーを、書籍(独学Programmer)を見ながら作っています。
しかし、作ったプログラムを実行しても、うまくいきません。
エラーの内容が、いまいち理解できません。
どこが間違っているのかご教授お願いします。
プログラム
発生している問題・エラーメッセージ
Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 1350, in do_open h.request(req.get_method(), req.selector, req.data, headers, File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1255, in request self._send_request(method, url, body, headers, encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1301, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1250, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1010, in _send_output self.send(msg) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 950, in send self.connect() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1424, in connect self.sock = self._context.wrap_socket(self.sock, File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 1040, in _create self.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/ssl.py", line 1309, in do_handshake self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "googlescrape1.py", line 22, in <module> Scraper(news).scrape() File "googlescrape1.py", line 10, in scrape r = urllib.request.urlopen(self.site) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 222, in urlopen return opener.open(url, data, timeout) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 525, in open response = self._open(req, data) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 542, in _open result = self._call_chain(self.handle_open, protocol, protocol + File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 502, in _call_chain result = func(*args) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 1393, in https_open return self.do_open(http.client.HTTPSConnection, req, File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py", line 1353, in do_open raise URLError(err) urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)>
該当のソースコード
python
1import urllib.request 2from bs4 import BeautifulSoup 3 4 5class Scraper: 6 def __init__(self, site): 7 self.site = site 8 9 def scrape(self): 10 r = urllib.request.urlopen(self.site) 11 html = r.read() 12 parser = "html.parser" 13 sp = BeautifulSoup(html, parser) 14 for tag in sp.find_all("a"): 15 url = tag.get("href") 16 if url is None: 17 continue 18 if "html" in url: 19 print("\n" + url) 20 21news = "https://news.google.com/" 22Scraper(news).scrape() 23
試したこと
beautifulsoup4がインストールされているか確認。結果、すでにインストールされていた。
補足情報(FW/ツールのバージョンなど)
pythonのバージョンはPython 3.8.5
Macのターミナルでプログラムを実行しました。
プログラムは、そのプログラムを書いたファイルが存在するディレクトリに移った後実行しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/20 05:21