はじめに
こんにちは、株式会社エーアイセキュリティラボ 新入社員の大桶です。
4月に入社した後、主に業務に必要な知識の習得に励んでいます。
現在、知識習得の一つのまとめとして簡易的なクローラーを作成しており、その中で苦戦したところなどをqiitaで書いていこうと思います。
クローラーとはWeb上の文書や画像を自動的に巡回して収集するプログラムのことです。
今回の記事では、要件と必要なスキル、開始当初のクローラーのイメージについて書いていきます。
要件
今回作成する簡易クローラーの要件は以下のようになります。
知識の習得度合いを測ることを目的に要件を定義してもらいました。
- 指定されたURLを起点に巡回を実施する
- リンクを巡回できること
- Webページからaタグを検出してリンクされたページにアクセスしていくことを指す
- フォームを巡回できること
- Webページ内のformタグを検出し、何らかの内容をフォームに入力して適切なリクエストが送信できることを指す
- ログインを実施できること
- ログインフォームにあらかじめ登録されたID/PWを入力し、その後発行されたセッションIDを管理してログイン状態を保つ
- 高速化のための並行実行ができること
- Node.jsのイベントループによる並行実行を活用して高速化を行う
- 並行実行数を指定できること
- 巡回結果はデータベースに保存すること
- データベースにはURL、ページタイトル、ステータスコード、リクエスト、レスポンスを保存すること
- 巡回結果をCSV出力できること
- 巡回を停止・再開できること
- 開発言語はNode.jsを使用すること
- AeyeScanは主にNode.jsで書かれているため、Node.jsに慣れる意味で開発言語にNode.jsが指定されている
必要なスキル
名前 | 簡単な解説 |
---|---|
JavaScript | インタープリタ型のプログラミング言語で、Webページでよく使用されるプログラミング言語として知られる。(参考: mdn web docs) |
Node.js | Node.js はスケーラブルなネットワークアプリケーションを構築するために設計された非同期型のイベント駆動の JavaScript 環境です。(公式サイトより) |
HTTP | HyperText Transfer Protocolの略。今回作成するクローラーでは「HTTPリクエストを送信→レスポンスから新たなリクエストの候補を作成」を繰り返します。 |
SQL | Structured Query Languageの略。データベースを操作するための言語。今回は送信したリクエストとレスポンスなどの情報をデータベースに保存するために使用します。 |
HTML | Hyper Text Markup Languageの略。Webページの作成に広く使用される言語。今回は巡回対象のページの作成に使用しました。 |
PHP | Webページの作成に使用される言語。今回は巡回対象のページの作成に使用しました。 |
正規表現 | 特定の並びの文字列を指定するための表現。今回は受け取ったレスポンスから特定のHTMLタグを取り出すためなどに使用します。 |
私が入社してからの2ヶ月間は主に以上の項目の学習に努めておりました。まだまだ学ぶことは多いですが、学習内容の一つのまとめとして今回の簡易クローラーを作成します。
当初のクローラーのイメージ
今回の課題の前にすでにaタグからリンクを巡回するコードは作成しておりました。
そちらの課題が終わった時には、formタグの巡回も同じようにタグを取得して処理すればできそうで、ログインもformの一種なのでformタグが巡回できればこちらもできるだろうと甘く考えていました。
実際にはformタグからformを埋めるためにはaタグからリンクを取得するよりも検討すべきことが多く、またログイン処理も単純にformを埋めるだけでは終わらないのですが、ここでどのような問題があるのかは次回以降の記事で書いていきます。
おわりに
今回の記事ではクローラーについての説明や開始当初の想定などについて書きました。
現在はコーディングを進めている途中で、開始当初には想定できていなかった問題に行き当たることもすでにありました。
次回の記事ではそのような問題の紹介と、それをどのように解決したかについて書いていこうと思います。