発端
最近とあるスクレイピンングが失敗するようになったのでヘッドレスをfalseにして画面を確認してみました
どうやら外部ソースの読み込みに時間がかかっており、そのせいで10秒のタイムアウトに引っかかっていた模様
今回の対象はHTMLをロードした時点で必要な情報は抜き出せる状態だったので、余計なドメインのリクエストを行わないようにしようと考えました
対処方法
元々画像のリクエストは行わないようにしていたので、特定ドメイン以外のリクエストも行わないような処理を追加しました
ソースはこんな感じになります
await page.setRequestInterception(true);
page.on("request", request => {
if (request.resourceType() === "image") {
request.abort();
} else if (!request.url().includes("example.com")) {
request.abort();
} else {
request.continue();
}
});
request.url().includes("example.com")
でURLに(この場合は) example.com
が含まれているかチェックしています
含まれている場合はtrueが返るので反転させて含まれない場合にabortするようにしています
結果
爆速でスクレイピング完了するようになりました
今後は他のスクレイピングのコードも不要なリクエストをなるべく行わないように直していきたいです
それでは良いスクレイピングライフを