Puppeteerでスクレイプ対象のhtml以外をプロキシから外す指定

シェアする

ちょっとハマりました。

Puppeteerでスクレイプ対象のhtml以外をプロキシから外す指定

スクレイピングをする時にPuppeteerを使うんですが、プロキシサービスを併用しています。このプロキシが流量でチャージされるので、コスト削減を目的にチューニングしました。

プロキシサービスのログ

プロキシサービスのログを見ていると、対象ページのドメイン以外に、見慣れない、けど見慣れたドメインが色々出ていて気になっていました。

www.google.comとかwww.googletagmanager.comとか。

あ、これはPuppeteerで読み込んでるページに貼られれている広告だったりGTMだったりだなー、と気づきましたが、それもプロキシに通してるのは結構コスト無駄ですね。

なので色々と試してみました。

ここなどで紹介されている方法はすごく洗練されてていいですね。

page.setRequestInterception(true)

でコネクションの接続先URLをチェックして不要なもの(というか最初に指定したURL以外)をabort()する、という方法。

ただ接続先サイトによってはうまく動作せずにTimeoutになってしまうこともありました。

プロキシサービスにも接続先ドメインのホワイトリスト、ブラックリストがあったのですが、これは最初のリクエストだけしか有効ではなく、今回のケースには使えず。

で、色々こねくり回して見つけた方法がこちら。

puppeteer.launch()のオプション

pupeeteer.launch()でargsでオプション指定できますが、最終的に有効だった指定はこれでした。

‘–proxy-bypass-list=www.google.com;www.googletagmanager.com;*.google.com;*.doubleclick.net;*.cloudflare.com;*.googleapis.com’,

–proxy-bypass-listで指定された文字列にマッチするホストはプロキシ無しでつなぐ、というオプション。禁止するわけではなくプロキシを通さなくする、というのがポイントです。

ホントはこれを繋がないオプションがあればベストなのですが、どれも上手くマッチしなかったです。

なのでこの方はプロキシ利用前提で流量削減のときのみ有効です。

この記事が気に入ったら
いいね!お願いします