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

ちょっとハマりました。

スポンサーリンク

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

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

プロキシサービスのログ

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

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

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

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

Puppeteerが遅いなと感じたときの高速化Tips - Qiita
先日、毎朝8時に私の住んでいる地域の洗濯指数をSlackで送ってくれるプログラムを作りました。天気予報とか自分で見ないもので、、今日洗濯しようかどうか決めるのに役立っています。仕組みとしては、GC…

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

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

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

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

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

スポンサーリンク