今まで様々なWebサイトなど情報を集めるためにクローラを作った時のノウハウ 言語は主にJavaScript(NodeJS)
後ろに行くほど高度・重実装
サイトが提供している RSSにアクセスして情報を取得する. 実装方法としてはrss-parserにURLから解析してくれるライブラリあるので,簡単に実装できる.
メリット :構造化されたデータを利用できる,サイト側が提供しているため過剰なリクエスト発生しにくい
デメリット:サイトのすべての情報がとれるわけではない,
利用ライブラリ: rss-parser
HTMLを取得しそのHTMLを解析する JSDOMを使えばURL指定で取得から解析まで1つのライブラリで行える HTMLの解析はXPATHや
メリット :ページにあるものすべて取得できる
デメリット :取得対象が動的サイトの場合使えない,文字コードによってはうまく取得できないことがある
利用ライブラリ: jsdom
axiosなどでHTMLを取得して,その結果をjsdomに取り込んで解析する JSDOMのライブラリではできない文字コードの変換など取得に細かく制御できる
メリット :jsdomのHTML取得で取れないもの補完できる
デメリット:取得対象が動的サイトの場合使えない
利用ライブラリ: axios + jsdom
axiosなどHTTPリクエストからデータ取得する 取得先のAPIは公開されたAPIだけでなく,ブラウザの開発者モードで通信見てAPI探す場合もある たいていJSONのレスポンスのため,解析はHTMLより容易
メリット : 動的ページでもほしい情報取得できる.
デメリット:APIアクセスに制限かかっている可能性がある.過剰アクセスするとアクセス遮断される恐れある.
利用ライブラリ: axios
pupetterやplaywrightなどヘッドレスブラウザを制御するライブラリ使ってブラウザ表示を再現して ページ取得する.ブラウザの操作再現できるのでログインやボタン操作もできる これらのライブラリで要素の指定がJSDOMなどのXPATHと少し異なる点に注意
メリット:一番自由度高い.動的なページ,ログイン操作など複雑な処理必要なページも取得できる
デメリット:要素の取得など実装が大変,通信が終わらなかったりするケースのハンドリングが必要
利用ライブラリ: puppeteer playwright