環境
- Python 3.3
- Scrapy 1.3.3
Scrapy とは?
Scrapy は Python のスクレイピングフレームワークです。
ググるとたくさん情報が出てきますので、詳しくはそちらにお任せします。(手抜きすぎw)
ProxyMesh とは?
ProxyMesh はHTTP の Proxy で IP を分散してくれます。
こちらもググるとそこそこ情報が出てきますので、詳しくはそちらにお任せします。(丸投げすぎw)
何がハマった?
それで、何にハマったかというと、SSL (https) サイトのスクレイピングです。
ProxyMesh のドキュメントでは、Scrapy の場合、以下のように書かれています。
次に、SSL (https) サイトでテストすると、 ProxyMesh の IP ではなく、自分の IP でアクセスしていました。
半日ほど調べましたが、結局わからず途方に暮れていましたが、もしかしてと思い、https_proxy 環境変数に変えてみると、うまく動きました。
原因は、未だに不明ですが、きっと urllib とかが関係している気がしています。(全然違うかもしれませんが)
ProxyMesh のドキュメントでは、Scrapy の場合、以下のように書かれています。
For the scrapy crawling framework, you must set http_proxy environment variable, as shown above, then activate the HttpProxyMiddleware.なので、環境変数にProxyMeshを指定して、非SSL (http) サイトでテストすると、IP が ProxyMesh で分散されることを確認できました。
次に、SSL (https) サイトでテストすると、 ProxyMesh の IP ではなく、自分の IP でアクセスしていました。
半日ほど調べましたが、結局わからず途方に暮れていましたが、もしかしてと思い、https_proxy 環境変数に変えてみると、うまく動きました。
原因は、未だに不明ですが、きっと urllib とかが関係している気がしています。(全然違うかもしれませんが)
まとめ
ということで、Scrapy + ProxyMesh で SSL (https) サイトをスクレイピングするとき、環境変数は、 http_proxy ではなく、https_proxy を使いましょう。私の環境だけだっだりして、、、