質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1056閲覧

【SSL証明検証エラー】Pythonにてwebスクレイピング中に (SSL.c:992)

penpen88

総合スコア17

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/05/23 13:54

編集2023/05/24 11:17

実現したいこと

・とあるサイト(URL3つ)の表データをcsvに出力したい。(本当は任意のURLを何個も書きたいですがここは例で3つにしています)

・その際、おそらくサイトの表をcsvにする段階で、下記エラーになる

前提

・エラーメッセージかなり長いですが、1番下の行を訳すると、SSL証明の検証でエラーと書かれています

・python16行目のURLのprintまではうまくいっているようです(出力結果2行目)

発生している問題・エラーメッセージ

DevTools listening on ws://127.0.0.1:64633/devtools/browser/a3577e7d-a91f-466d-9e77-8fc8c126ba59 ['https://finance.yahoo.co.jp/quote/5838.T/history', 'https://finance.yahoo.co.jp/quote/7330.T/history', 'https://finance.yahoo.co.jp/quote/5572.T/history'] Traceback (most recent call last): File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 1348, in do_open h.request(req.get_method(), req.selector, req.data, headers, File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1282, in request self._send_request(method, url, body, headers, encode_chunked) File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1328, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1277, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1037, in _send_output self.send(msg) File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 975, in send self.connect() File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1454, in connect self.sock = self._context.wrap_socket(self.sock, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\ssl.py", line 517, in wrap_socket return self.sslsocket_class._create( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\ssl.py", line 1075, in _create self.do_handshake() File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\ssl.py", line 1346, in do_handshake self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\ukata\KABU10days\10days_error.py", line 25, in <module> df = pd.read_html(url) ^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\html.py", line 1212, in read_html return _parse( ^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\html.py", line 981, in _parse tables = p.parse_tables() ^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\html.py", line 257, in parse_tables tables = self._parse_tables(self._build_doc(), self.match, self.attrs) ^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\html.py", line 816, in _build_doc raise e File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\html.py", line 797, in _build_doc with urlopen(self.io) as f: ^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas\io\common.py", line 270, in urlopen return urllib.request.urlopen(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 216, in urlopen return opener.open(url, data, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 519, in open response = self._open(req, data) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 536, in _open result = self._call_chain(self.handle_open, protocol, protocol + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 496, in _call_chain result = func(*args) ^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 1391, in https_open return self.do_open(http.client.HTTPSConnection, req, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ukata\AppData\Local\Programs\Python\Python311\Lib\urllib\request.py", line 1351, 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:992)>

該当のソースコード

Python

1#インポートとか色々 2from selenium import webdriver 3from selenium.webdriver.common.by import By 4from selenium.webdriver.common.keys import Keys 5import time 6from selenium.webdriver.chrome import service as fs 7CHROMEDRIVER = "C:\chromedriver_win32\chromedriver.exe" 8 9chrome_service = fs.Service(executable_path=CHROMEDRIVER) 10browser = webdriver.Chrome(service=chrome_service) 11 12 13#yahoo financeのURL 14list_urls = ['https://finance.yahoo.co.jp/quote/5838.T/history','https://finance.yahoo.co.jp/quote/7330.T/history','https://finance.yahoo.co.jp/quote/5572.T/history'] 15 16print(list_urls) 17 18# webサイトの表をCSVに出力 19import pandas as pd 20import sys 21 22dfs = [] 23for url in list_urls: 24 try: 25 df = pd.read_html(url) 26 dfs.append(df[0]) 27 except ValueError: 28 print('not found stock table', file=sys.stderr) 29 break 30else: 31 df = pd.concat(dfs, ignore_index=True) 32 df.to_csv('out.csv', index=False, encoding='shift-jis') 33

試したこと

一通りググって解決法を真似してみましたが、うまくいきません

補足情報(FW/ツールのバージョンなど)

Windows10使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2023/05/23 14:03

> 下記pythonコードの、13行で 13行目はコメントですね。エラーの発生個所はどこでしょうか?エラーメッセージの抜粋ですと分かりにくいためエラーメッセージ詳細を掲載いただきたいです。
jbpb0

2023/05/23 14:05

質問に記載のエラーメッセージよりも上に「Traceback」と書かれてたら、そこから下をできるだけ省略せずに質問に記載してください (ここに書くのではなく、質問を編集して追記する) ユーザー名等の個人情報は伏せ字でいいですが、それ以外はできるだけそのまま記載してください
penpen88

2023/05/23 15:02

ありがとうございます!解決しました! ちなみにですが、今日ずっとググってましたがこのサイトたどり着きませんでした。なんて調べたのか良ければお聞きしてもいいですか?
meg_

2023/05/23 15:05

Yahoo!ファイナンスのスクレイピングは禁止されているようです。 > Yahoo!ファイナンスでは、Yahoo!ファイナンスに掲載している株価やその他のデータを、プログラム等を用いて機械的に取得する行為(スクレイピング等)について、システムに過度の負荷がかかり、安定したサービス提供に支障をきたす恐れがあることから禁止しています。 https://support.yahoo-net.jp/PccFinance/s/article/H000011276
jbpb0

2023/05/23 23:52

> なんて調べたのか "ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate" でググると、上の方に出てくると思います (前後を「"」で囲んでください)
penpen88

2023/05/24 02:17

ご丁寧にありがとうございます!
guest

回答1

0

質問に対する解法ではありませんが、Yahoo!ファイナンスのスクレイピングは禁止されおり別の方法を推奨されていますのでこちらの利用を検討されてはいかがでしょうか?

株価データのダウンロードを利用したい場合は、「VIP倶楽部」の「時系列データダウンロード」をご利用ください。

Yahoo!ファイナンスでは、Yahoo!ファイナンスに掲載している株価やその他のデータを、プログラム等を用いて機械的に取得する行為(スクレイピング等)について、システムに過度の負荷がかかり、安定したサービス提供に支障をきたす恐れがあることから禁止しています。

https://support.yahoo-net.jp/PccFinance/s/article/H000011276

投稿2023/05/23 15:08

meg_

総合スコア10567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問