Webスクレイピングのコードを書いていて気づいたこと
この3日くらい暇なときに Web スクレイピングをする javascript コードを書いているんだが、処理が複雑になってくるにつれてコードの見通しが悪くなってきた。コードが汚いという理由によってやる気がなくなるレベルだったので、今日はリファクタリングに費やそうと思ってコードに色々と手を入れてみた結果、コードの治安が川崎市から文京区くらいになった。以下、スクレイピングのコードを書くときに気をつけるべきだと思ったこと。
- htmlをwebからフェッチする関数とhtmlをスクレイピングして情報を抽出する関数を分ける
- 1つの関数に1つの役割を持たせるという当たり前の原則ですが、できてないところがあった
- 関数の名前に命名規則を設ける
- 関数の名前は
getHogePage
みたいな感じで{動詞}{名詞}
みたいな感じになると思うが、この動詞と名詞それぞれについてちゃんと命名規則を考えてからコードを描き始めた方が良い。雰囲気でget
とかfetch
とかscrape
とかを使い分けてると後で見返したときに悲しくなってくる。名詞についても、htmlページに階層がある場合は、この階層のページはIndexPage
で、この階層はItemPage
で...などと事前に決めておくと調子よくコードが書ける
- 関数の名前は
async/await
を使う- 例外を使う
- 最近よくgo言語を書いていて、例外を使わずいちいちエラーチェックをした方がわかりやすいという考えになっているんだけど、大量の web ページをスクレイピングするとエッジケース的なエラーが数種類出てしまう場合が多いので、よく発生するエラーだけを手で頑張って処理して残りは例外としてまとめて
catch
して処理する方が良さそう
- 最近よくgo言語を書いていて、例外を使わずいちいちエラーチェックをした方がわかりやすいという考えになっているんだけど、大量の web ページをスクレイピングするとエッジケース的なエラーが数種類出てしまう場合が多いので、よく発生するエラーだけを手で頑張って処理して残りは例外としてまとめて