Snippetsコピペ用のPython便利コードをメモっていくサイトですメニューコンテンツへ移動ホームscrapyでシュッとスクレイピングする1件のフィードバックScrapyはスクレイピング用のフレームワークで、scrapyプロジェクトを作って大規模なクローリング・スクレイピングを作ることができるが、ちょこっと使い捨てなスクレイピングをするだけのコードも簡単に作ることができる。ここでは、scrapyのプロジェクトを作らずスクレイピングのコードを作成する一連の流れを紹介する。目的scrapyのexampleページを対象とする。https://doc.scrapy.org/en/latest/_static/selectors-sample1.html上記URLがレスポンスするHTMLは以下のようになる。</body></html>上記ページのaタグ内テキストの一覧を取得する。スクレイピングの動作確認いきなりコードを書いてから動作確認してもよいが、スクレイピングのセレクターが正しいかどうか確認してみるには対話コンソールで確認するのが楽。目的のデータがどのようにスクレイピングすれば取得できるかを手作業で確認する。shellを起動して確認。']fetchコマンドでURLを渡して、ページの情報を取得する。取得結果はresponseという変数に自動的に保存される。resposen.cssで、CSSセレクタを使ってaタグ内のテキストを取得する。結果、目的のデータが取得できた。shellでの作業はこれから書くコードの動きを確認するためのもので、コードの作成には関係しない。「CSSセレクタをこのように記述すれば目的のデータが取れるんだな」ということを試行錯誤しながら試すことができる。セレクタの記述については、xpathやcssセレクタが使用可能。使い方のチートシートはこちらの記事を参照。shellで試行錯誤することで確認できた。あとはこれを実行するコードを書けば良い。ScrapyではWebからページをクローリングして、スクレイピングする部分はSpiderというプログラムで記述する。scrapyのツールでSpiderの雛形が作成できる。genspiderコマンドでSpiderの雛形を作成する。Spiderの名前とドメインを指定する。doc.scrapy.org生成された雛形のSpiderファイル「first_scrapy.py」を編集して開始URLとレスポンスの処理を修正する。runspiderコマンドを実行する。5コードで実行しているアンカータグの中身が出力されていることが分かる。--loglevelを指定しないとデバッグの出力が得られる。本来、Spiderはクローリング、スクレイピングした結果をデータとして返却する役割を担う。先ほどのスクリプトはスクレイピングした結果をそのまま出力することで処理を終えてしまっている。簡単な処理ならばそれで十分だが「データの取得」と「取得したデータを活用する」部分は分けたほうがよいこともある。Spiderはデータを取得して返すことを目的とした実装にできる。その場合はdict型でデータをyieldで逐次返却するようにする。スクレイピングの処理を修正し、aタグを走査してhref属性とtext要素を取得するように修正。}runspiderを実行する際に、出力先としてhoge.jsonというファイルを指定する。first_scrapy.pyhoge.jsonの中身はこのようになる。"}]jsonファイルを出力先に指定したことで、自動的にjson形式で出力されている。フォーマットを指定する。xmlなどが指定可能)また出力先の指定に-を指定すると標準出力に出力できる。5スクレイピングの注意事項スクレイピングはブラウザと同じようにHTTPリクエストをサーバーに送り、データを取得するプログラムだが、プログラムの記述方法次第では、短時間に大量のリクエストをサーバーに送りつけ攻撃のようになってしまう事がある。スクレイピングを実装する作法としては、繰り返しリクエストを送る間隔にsleep処理を入れて(最低でも1秒以上)短時間に大量のリクエストを送らないように注意する必要がある。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。date*日本語が含まれない投稿は無視されますのでご注意ください。