ログイン画面
ログイン画面は通常の入力と異なりCSRFトークンをPOSTリクエストに合わせて送信する必要があります。ログイン処理が必要なWebアプリのスクレイピングの場合は、CSRFトークンが設定されているinput要素からCSRFトークンを取得して送信するように実装しましょう。
CSRFトークンは、formのhiddenパラメータに埋め込まれていることが多いのでformのhidden要素をXpathかCSSセレクタなどで特定します。
要素の絞り込み方
id属性を持っているなら積極的に利用する
HTMLのid属性はそのHTMLでは必ず一意な要素になるのでもし持っていたら積極的に活用しましょう。ただ、最近はclassだけ利用してコーディングをするという設計になっているサイトが多いのであくまでラッキー程度になります。
データ整形
取得データが改行が含まれているケースがある。
例えば、タイトルを取得したいと思ってもタイトルに改行が含まれているケースがあります。
Scrapyの場合
getAllで配列として取得してPythonのjoinメソッドで半角スペースを開けて返すメソッドを作って結合します。
取得しているデータの先頭や末尾に空白が含まれているケースがある。
XPathを使っている場合
normalize-spaceでXpathを囲ってあげることで先頭や末尾のスペースを除去できます。
1 |
'normalize-space(//h3/text())' |
XPathを使っていない場合(例えば、CSSセレクタで取得する場合)
Pythonのstripメソッドを使う。先頭や末尾のスペースを取り除けます。
数値が文字列として取得されてきてしまう。
例えば、金額などの項目です。後で数値として処理したいのに文字列のままになっていると不便です。
整形するメソッドを作ってあげるようにしましょう。具体的には例えば金額であれば以下のような加工処理が必要です。
- ¥をrepalceで置換する。
- ,をreplaceで置換する。
- intで数値型に変換する。
並び順を考慮する
Scrapyの場合
Scrapyだと以下のようなアーキテクチャになっており意図した順番にならない可能性があります。
- 複数同時にリクエストを処理できるようになっている。
- LIFOの方式をとっており、並び順で処理されることがない。
Scrapyでは保留中のリクエストを保存するためにLIFO キューを利用します。
この記事へのコメントはありません。