🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

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

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

解決済

1回答

16105閲覧

requests.getによるProxyErrorを解決したい

kkz

総合スコア12

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python

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

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

0クリップ

投稿2019/11/01 06:33

編集2019/11/01 06:39

[コードの参考サイト]
https://qiita.com/neet-AI/items/98d4194872ee4f53e3b4

[実行環境]
Python 3.7.3
Windows 10 Pro
Jupiter notebook
社内ネットワーク

python

1import requests 2response = requests.get('https://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%BC%E3%82%B8') 3print(response.text)

スクレイピングの練習のため上記のコードを実行すると、下記のようなエラーが出ました。
おそらく社内のプロキシに引っかかったのだと思いますが、どうすべきか分からず苦しんでいます。
解決方法を教えていただけないでしょうか?

--------------------------------------------------------------------------- OSError Traceback (most recent call last) C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw) 593 if is_new_proxy_conn: --> 594 self._prepare_proxy(conn) 595 C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py in _prepare_proxy(self, conn) 804 conn.set_tunnel(self._proxy_host, self.port, self.proxy_headers) --> 805 conn.connect() 806 C:\Anaconda3\lib\site-packages\urllib3\connection.py in connect(self) 307 # self._tunnel_host below. --> 308 self._tunnel() 309 # Mark this connection as not reusable C:\Anaconda3\lib\http\client.py in _tunnel(self) 910 raise OSError("Tunnel connection failed: %d %s" % (code, --> 911 message.strip())) 912 while True: OSError: Tunnel connection failed: 407 Proxy Authentication Required ( Forefront TMG は、要求を実行する権限を要求しています。Web プロキシ フィルターへのアクセスは拒否されます。 ) During handling of the above exception, another exception occurred: MaxRetryError Traceback (most recent call last) C:\Anaconda3\lib\site-packages\requests\adapters.py in send(self, request, stream, timeout, verify, cert, proxies) 448 retries=self.max_retries, --> 449 timeout=timeout 450 ) C:\Anaconda3\lib\site-packages\urllib3\connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw) 637 retries = retries.increment(method, url, error=e, _pool=self, --> 638 _stacktrace=sys.exc_info()[2]) 639 retries.sleep() C:\Anaconda3\lib\site-packages\urllib3\util\retry.py in increment(self, method, url, response, error, _pool, _stacktrace) 398 if new_retry.is_exhausted(): --> 399 raise MaxRetryError(_pool, url, error or ResponseError(cause)) 400 MaxRetryError: HTTPSConnectionPool(host='ja.wikipedia.org', port=443): Max retries exceeded with url: /wiki/%E3%83%9A%E3%83%BC%E3%82%B8 (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 407 Proxy Authentication Required ( Forefront TMG ã\x81¯ã\x80\x81è¦\x81æ±\x82ã\x82\x92å®\x9fè¡\x8cã\x81\x99ã\x82\x8b権é\x99\x90ã\x82\x92è¦\x81æ±\x82ã\x81\x97ã\x81¦ã\x81\x84ã\x81¾ã\x81\x99ã\x80\x82Web ã\x83\x97ã\x83\xadã\x82\xadã\x82· ã\x83\x95ã\x82£ã\x83«ã\x82¿ã\x83¼ã\x81¸ã\x81®ã\x82¢ã\x82¯ã\x82»ã\x82¹ã\x81¯æ\x8b\x92å\x90¦ã\x81\x95ã\x82\x8cã\x81¾ã\x81\x99ã\x80\x82 )'))) During handling of the above exception, another exception occurred: ProxyError Traceback (most recent call last) <ipython-input-26-1ec3f8246665> in <module> 1 import requests 2 ----> 3 req = requests.get("https://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%BC%E3%82%B8") 4 print(req.text) C:\Anaconda3\lib\site-packages\requests\api.py in get(url, params, **kwargs) 73 74 kwargs.setdefault('allow_redirects', True) ---> 75 return request('get', url, params=params, **kwargs) 76 77 C:\Anaconda3\lib\site-packages\requests\api.py in request(method, url, **kwargs) 58 # cases, and look like a memory leak in others. 59 with sessions.Session() as session: ---> 60 return session.request(method=method, url=url, **kwargs) 61 62 C:\Anaconda3\lib\site-packages\requests\sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 531 } 532 send_kwargs.update(settings) --> 533 resp = self.send(prep, **send_kwargs) 534 535 return resp C:\Anaconda3\lib\site-packages\requests\sessions.py in send(self, request, **kwargs) 644 645 # Send the request --> 646 r = adapter.send(request, **kwargs) 647 648 # Total elapsed time of the request (approximately) C:\Anaconda3\lib\site-packages\requests\adapters.py in send(self, request, stream, timeout, verify, cert, proxies) 508 509 if isinstance(e.reason, _ProxyError): --> 510 raise ProxyError(e, request=request) 511 512 if isinstance(e.reason, _SSLError): ProxyError: HTTPSConnectionPool(host='ja.wikipedia.org', port=443): Max retries exceeded with url: /wiki/%E3%83%9A%E3%83%BC%E3%82%B8 (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 407 Proxy Authentication Required ( Forefront TMG ã\x81¯ã\x80\x81è¦\x81æ±\x82ã\x82\x92å®\x9fè¡\x8cã\x81\x99ã\x82\x8b権é\x99\x90ã\x82\x92è¦\x81æ±\x82ã\x81\x97ã\x81¦ã\x81\x84ã\x81¾ã\x81\x99ã\x80\x82Web ã\x83\x97ã\x83\xadã\x82\xadã\x82· ã\x83\x95ã\x82£ã\x83«ã\x82¿ã\x83¼ã\x81¸ã\x81®ã\x82¢ã\x82¯ã\x82»ã\x82¹ã\x81¯æ\x8b\x92å\x90¦ã\x81\x95ã\x82\x8cã\x81¾ã\x81\x99ã\x80\x82 )')))

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

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

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

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

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

matobaa

2019/11/01 07:46

Proxyに認証情報を要求されているようですが、普段はどうやっていますか? Webブラウザで認証ダイアログが出てきてユーザ名とパスワードを入力しているのか、ICカードリーダーに社員カードを刺しておくと自動的にやってくれるとかそのへんを知りたいです。
kkz

2019/11/01 07:53

Google Chromeをブラウザとして使っていて、新しく開くたびに社員IDとパスワードを入力して認証しています。 ICカードの類は使用しておりません。 よろしくお願いいたします。
guest

回答1

0

ベストアンサー

OSError: Tunnel connection failed: 407 Proxy Authentication Required ( Forefront TMG は、要求を実行する権限を要求しています。Web プロキシ フィルターへのアクセスは拒否されます。 )

もじばけらった に貼って、上にiso-8859-1、下にUTF-8 を指定したら、こんな文字が浮かんできました:

OSError: Tunnel connection failed: 407 Proxy Authentication Required ( Forefront TMG は、要求を実行する権限を要求しています。Web プロキシ フィルターへのアクセスは拒否されます。 )

Proxyまでは道に迷ってないようなので、環境変数 HTTPS_PROXY あたりの設定はちゃんとできているようです。

ということなので、Proxyに認証情報を渡してやりましょう。

requestsのドキュメントのProxies によれば、Basic認証であれば、こんな感じでProxy認証情報を載せられるようです。

python

1proxies = { 2 "http": "http://user:pass@10.10.1.10:3128/", # 環境に合わせて設定すること 3 "https": "https://user:pass@10.10.1.10:1080/", # 環境に合わせて設定すること 4} 5 6requests.get('https://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%BC%E3%82%B8', proxies=proxies)

環境変数 HTTPS_PROXY に上記のようにユーザ名とパスワードを仕込むのでも同じ結果が得られるかも。

認証方式がBasic認証ではない場合は、別の方法が必要かもしれません。

投稿2019/11/01 07:56

matobaa

総合スコア2493

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

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

kkz

2019/11/01 08:11

ご回答ありがとうございます。 すぐ試したいところですが、11/5までできない状況です。 basic認証かどうかは現状分かりません。どう確認するのでしょうか? お教えいただいた認証情報を載せる方法は以前試しましたが、そのときは30秒ほど読み込み時間を経たあと同じようなProxyErrorが起こりました。 環境に合わせた数字部分の決め方がわかっていなかったことが原因かもしれません。 10.10.1.10:1080といった数字部分はどういう基準で決めればいいのでしょうか?
matobaa

2019/11/01 08:43

> 10.10.1.10:1080といった数字部分 inetcpl.cpl を実行して 接続 > LANの設定 > プロキシサーバ の画面で設定されている、と思います。あるいは環境変数 HTTPS_PROXY で設定されているかも。
kkz

2019/11/04 23:47

教えていただいた方法で成功しました。誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問