Python、機械学習

【Python】プロキシあり/なし両方の環境でpip, condaを使ったりスクレイピングするには?(proxy)

自宅と会社の両方でPythonを使う方、多いと思います。その場合、ほぼ間違いなくつまづくのがプロキシ(proxy)の設定のところでしょう。

私も相当に苦戦しました。

ここでは、プロキシ下の環境にある場合、ない場合の両方に対応できる設定方法について説明します。

プロキシ環境下=社内、プロキシ環境外=社外、です。

プロキシ(proxy)のあり/なしが関係する場面とは?

インターネットにアクセスする場合、自分のパソコンがプロキシ下の環境にあるのか、プロキシの外にいるのかで対応が変わってきます。

みなさんがPythonを使ってインターネットにアクセスにするのってどんな時でしょうか?

大きく3つあると思います。

acondaを使ってライブラリをインストールする
bpipを使ってライブラリをインストールする
cAPI、スクレイピングをする

a)、 b)はライブラリをインストールするときに使います。

a)はAnacondaのサイトにアクセスしてライブラリをダウンロードするものです。

b)はPyPi(Python Package Index)のサイトにアクセスしてライブラリをダウンロードするものです。

したがって、インターネットへのアクセスが必要になります。

c)は、APIでデータベースからデータを取得したり、スクレイピングでWEBページの情報を取得する場合です。

こちらも当然ながらインターネットへのアクセスが必要です。

常にプロキシ環境の外でPythonを使う人(自宅LAN, 自宅wifi、外のwifiなど)

プロキシ下の環境にいない場合では、何も設定しなくてもインターネットにアクセスできます。

したがって、プロキシ下の環境でPythonを使うことがない方は、この記事を読む必要はありません。

常にプロキシ環境内でPythonを使う人(社内LAN, 社内wifiなど)

プロキシ環境下でインターネットにアクセスするには、プロキシ認証を通過させる必要があります。

プロキシ認証とはなにか。

プロキシ下でYahoo!を見ようと思ってブラウザを立ち上げると、ブラウザからIDとパスワードの入力を求められると思います。

会社から与えられたプロキシのIDとパスワードを入力すれば、Yahoo!につながります。

ほとんどの人はIDとパスワードをブラウザに記憶させているかと思いますので、普段意識していないかもしれませんが・・・。

これがプロキシ認証です。

Pythonでインターネットにアクセスする場合も、同様の認証が必要になります。

つづいて、プロキシ認証を通過する方法を説明します。

Python利用者がプロキシ認証を通過する方法

まずは①プロキシの情報を整理します。その後、②プロキシ認証を通過させます。

①まずはプロキシの情報を確認

まずは、プロキシの情報を確認してください。プロキシの情報とは次のようなものです。

(例)
IDdoraemon
パスワード1a2b3c
プロキシアドレス111.111.111.111
ポート8080

IDとパスワードは、ブラウザでYahoo!を見るときのものと同じです。

プロキシアドレス、ポートは、次の手順で確認します。

簡単な方法 (netstatを使う)

一番簡単なのは、コマンドプロンプトで「netstat -n」と打ってエンターキーを押す方法です。

アクティブな接続に関する情報が表示されますので、「プロトコル」 「ローカル アドレス」 「外部アドレス」 「状態」のうち、外部アドレスに着目してください。

外部アドレスのところには、IPアドレスとポートが「:」を介して並んでいると思います。

いくつか表示されているかと思いますが、頻出のものがあなたのIPアドレスとポートであるはずです。

ポート番号は80や8080であることが多いようです。

違うやり方

違うやり方も紹介しておきます。

秀丸ネットモニターをインストールします。

こちらのHPの下の方にダウンロードできるところがあります。

C:\Program Files (x86)\HmNetMonitorの中に、「HmNetMonitor.exe」という名前のexeファイルが入っていますので、ダブルクリックして立ち上げます。

現在接続している場所の一覧が表示されたウィンドウが開きます。

一覧を表示した状態でブラウザを立ち上げてみて下さい。接続先が1つ増えるのがわかります。

あるいは、一覧を表示した状態でブラウザを立ち下げると、文字の色が灰色に変わる接続先があるのがわかります。

終了時刻の欄には、現在の時刻が表示されるかと思います。

そのように変化する接続先のIPアドレスが、あなたのプロキシアドレスです。

つづいて、パソコン画面の左下のWindowsマークをクリックし、ギヤのマーク(Windowsの設定)をクリックします。

“Windowsの設定”の画面が立ち上がったら、ネットワークとインターネットをクリックし、左下にある「プロキシ」をクリックします。

「自動プロキシ セットアップ」のスクリプトのアドレスの欄に、「http://・・・」と記載されているかと思います。

それをコピーします。

ブラウザでURLに入れてアクセスすると、「次のファイルを開こうとしています:」と出ますので、メモ帳で開きます。

色々書いているかと思いますが、ctrl+Fでメモ帳の検索画面を出し、先ほど確認したプロキシアドレスを入力し、「次を検索」をクリックします。

プロキシのアドレスを見つけたら、その横に「:○○○○」と数字が書いているかと思います。

これがポート番号です。

なお、プロキシアドレス、ポートの確認が済めば、秀丸ネットモニターはアンインストールしてもオッケーです。

②プロキシ認証を通過させる

プロキシ情報を整理したら、いよいよプロキシ認証を通過させる設定に入ります。

ここでもう一度、インターネットにアクセスする場面を思い出してください。

acondaを使ってライブラリをインストールする
bpipを使ってライブラリをインストールする
cAPI、スクレイピングをする

a)b)c)すべてやりますよ、という方は「方法1」が良いです。

a)しかやりませんよ、という方は「方法2」がおすすめです。

b)c)しかやりませんよ、という方は「方法3」という手もあります。

特にこだわりがなければ、オールマイティな「方法1」が一番いいかと思います。

以下、方法1〜3について説明します。

方法1:プロキシの情報をインプットした環境変数を作る

プロキシ認証に必要な情報をあらかじめ環境変数として設定しておくことで、自動的にプロキシ認証を通過させることが可能になります。

まず、キーボードの「Windowsマーク」+「PAUSE BREAK」を同時押しして、システムのウィンドウを立ち上げます。

次に、左の「システムの詳細設定」をクリックし、下の方にある「環境変数」をクリックします。

上段に「ユーザー環境変数」、下段に「システム環境変数」とあります。上段がユーザー、下段がadministratorです。

ユーザーとしてログインした状態のみに設定を反映したいときは上段を、全ユーザー、administratorも含めて全てに設定を反映したいときは下段をいじります。

基本的には下段をいじればよいですが、パソコンを複数人で使っていて、他のユーザーでログインしたときは設定を反映させたくない場合は、上段をいじるようにして下さい。

以下、下段の「システム環境変数」を設定する前提で話を進めます。

「システム環境変数」の中には複数の変数がリストアップされています。ここに新しい環境変数を作ります。

「新規」をクリックし、変数名に「HTTP_PROXY」、変数値に「http://doraemon:1a2b3c@111.111.111.111:8080」を記入して「OK」をクリックします。

これで、「HTTP_PROXY」という変数が作成されました。

もう一度「新規」をクリックし、変数名に「HTTPS_PROXY」、変数値に「https://doraemon:1a2b3c@111.111.111.111:8080」を記入して「OK」をクリックします。

これで、「HTTPS_PROXY」という変数が作成されました。

これらの操作により、http、httpsどちらのURLにも、プロキシ認証を経てアクセス可能になりました。

a)〜c)のいずれも、プロキシ環境内で実施できるようになります。

もしエラーが出る場合は、PCを再起動してみてください。再起動により環境変数の設定が反映され、うまく動作するようになります。

もし、プロキシ環境の外で a)〜c)をする場合は、先ほどの環境変数の設定画面で「HTTP_PROXY」、「HTTPS_PROXY」をそれぞれ選択し、削除ボタンをクリックして削除してください。

もしエラーが出る場合は、PCを再起動してください。

「HTTP_PROXY」、「HTTPS_PROXY」の作成↔︎削除のスイッチングにより、プロキシの中、外の両方に対応できるということです。

作成↔︎削除の手間はありますが、どこかに変数名と変数値を記入したメモ帳を作ってコピペできるようにしておけば、さして面倒ではありませんよ。

方法2:プロキシの情報をインプットしたファイル「.condarc」を作る

a)condaを使ってライブラリをインストールする、だけであれば、環境変数を作成しなくてもプロキシ認証を通過できるようにする方法があります。

まず、「C:ProgramData¥Anaconda3¥」に移動し、右クリックして新規作成→テキストドキュメントを選択し、テキストファイルを作ります。

名前を変更し、.txtの拡張子も消した上で「.condarc.」と入力します。

condarcという文字の前と後ろにドット「.」が入ったものです。

「拡張子を変更すると、ファイルが使えなくなる可能性があります。変更しますか?」と聞かれますので、「はい」をクリックします。

すると後ろのドットが消え、「.condarc」というファイル名のファイルができます。

このファイルをメモ帳で開き、次のように入力します。

proxy_servers:
http: http://doraemon:1a2b3c@111.111.111.111:8080
https: https://doraemon:1a2b3c@111.111.111.111:8080

そして、上書き保存します。

プロキシ環境の外では、「.condarc」ファイルを「C:ProgramData¥Anaconda3¥」から外に出します。

つまり、プロキシ環境内では「.condarc」ファイルを「C:ProgramData¥Anaconda3¥」に置いておき、プロキシ環境外は例えばデスクトップに移動させればOKです。

繰り返しますが、この方法は a)のみが対象です。

b)、c)には対応できませんのでご注意ください。

方法3:コードの中でプロキシの情報を書く

都度、プロキシの情報を書くという方法もあります。

この方法は、b)のpipを使ってライブラリをインストールする、c)のAPI、スクレイピングをする、の場合に有効です。

b)pipを使ってライブラリをインストールする、の場合

コマンドプロンプトで次のように打ってください。

pip install —proxy=http://doraemon:1a2b3c@111.111.111.111:8080 〇〇

 

うまくいかなかったらhttpsの方を試してください。

pip install —proxy=https://doraemon:1a2b3c@111.111.111.111:8080 〇〇


 

c)API、スクレイピングをする、の場合

プログラムコードの冒頭で、次のようなコードを挿入してください。

import urllib.request

PROXIES = {'http':'http//doraemon:1a2b3c@111.111.111.111:8080', 
'https':'https//doraemon:1a2b3c@111.111.111.111:8080'}
proxy_handler = urllib.request.ProxyHandler(PROXYS)
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)

この方法は b)、c)が対象です。

a)には対応できませんのでご注意ください。

それでもうまくいかない場合

ひょっとしたら、こちらの方法で解決するかもしれません。(ユーザーではなく管理者としてコマンドを立ち上げる)

なぜかpipやcondaでインストールできない!そんな時の対処法(anaconda)WindowsのパソコンでAnacondaを使っている人、結構いると思います。 私はMacとWindows両方にAnacondaを...

まとめ

一番わかりやすいのは、環境変数の作成⇄削除でプロキシの中と外に対応する方法1です。

a)〜c)すべてに対応できますので、困ることはないと思います。

使用用途が限られていたり、方法1が面倒だという人は、方法2や方法3を使えばよいかと思います。