GAS×webスクレイピング - 苦戦した点
— Development Notes — 1 min read
特定のサイトから,ワンポチで簡単に情報を収集したかったので,GASを使ってWebスクレイピングをするプログラムを書いた.
その時に書いてて苦戦した部分のメモ.
参考サイト
【Parser】GASでHTML解析する方法
GASでスクレイピングする方法
参考サイトの通りにやってて,詰まったのは
- Parserでエラー
- URLが404でエラー
- Parserが機能しない時がある
Parserでエラー
エラー文
1TypeError: Cannot read property 'indexOf' of undefined2Parser_.build @ Parser.gs:69
エラーの中身
Parserで指定しているfromの中身の,検索用の文字列を見つけられなかった.
対策
if文で場合分け
URLが404でエラー
URLが404で返ってくると,UrlFetchApp.fetchで処理が止まるエラー
対策(例)
1var name = [];2const options = {3 "muteHttpExceptions": true, // 404エラーでも処理を継続する4};5for (let i=0; i<xxx.length; i++) {6 Utilities.sleep(5000);7 const url = "https://xxx/"+ xxx[i][0] +"/";8 const html = UrlFetchApp.fetch(charaUrl,options);9 if (charaHtml.getResponseCode() == 200) {10 name[i] = Parser.data(html.getContentText("UTF-8"))11 .from('<xxx>').to('</xxx>').build();12 }else {13 name[i] = "";14 }15}
参考サイト
GASでのWebスクレイピングについて雑多に書いてみた
Handle 404 errors in UrlFetchApp.fetch()(英語)
Parserが機能しない時がある
よく分かってないエラー
Parserで切り取ってるのに,切り取れてないことがある.
エラー?の中身
Parserでいらない文字列を排除する過程で,HTMLの「”」(ダブルクォーテーション)が無くなることがある.無くならないこともある.
対策
- デバックでParserした文を確認する
- 意図した場所で切り取りが出来ているか確認する
- from と to の検索語に「”」を入れたり抜いたりする
もっと効率的な対策があるかもしれない.