こんちはー。
今回は僕が最近はまっている(?)スクレイピングについての記事を書きたいと思います。
僕一応エンジニアをしております。といっても大して技術力ないのでパチモンレベルですが。。。しかしです。エンジニアの方っていい人多いんですよ、僕のポンコツプログラムでもここはこうした方がいいよとかアドバイスをくれて。情報系の技術者になってよかったと思ったりしています。
ただ自分の能力の無さに自分には向いていないじゃないかと自信を無くし迷走することもしばしば。
個人的な悩み話はここぐらいにしといて、本題に入ります。最近、空いた時間でスクレピングのコードをpythonで書いているのですが、それに伴って一冊本を読んでみました。
実際、ネットには優秀で優しいエンジニアの方々が書いたQiitaなどの記事がたくさんあるので、基本的に本は買わなくてもよいと思っていたのですが、試しに買ってみて、流し読みをしてみて、自分が知らなかったことが見つかるかもしれないと思い読んで見ました。
例えばとあるところをどうプログラミングで書こうかと悩んだとき、「どうプログラミングで書くか」を調べるので、そこの部分しか理解できないんです。なので、全体を俯瞰するためにも読んでみようと思いました。
読んだ本は「スクレイピング・ハッキング・ラボ Pythonで自動化する未来型生活 (技術の泉シリーズ(NextPublishing))」という本です。
自分が理解している部分は割かし飛ばして読めるので割かし時間がかからず読めました。
スクレイピングとは
まずはスクレイピングとはについて書きます。第一回なので。
スクレイピングとはwebサイトに公開されている情報を収集し、その情報から自分の欲しい情報だけを抽出して意図した情報のみを取り出す作業のことです。
スクレイピングの危険性
スクレイピングを実行する際に注意することとしては実装内容や対象サービスによっては著作権法、不正アクセス禁止法の違反だったり、偽計業務妨害に問われてしまう可能性があります。
過去にこんな有名な裁判沙汰が起きています。
岡崎市立中央図書館事件(Librahack事件)
2010年3月、愛知県岡崎市にある岡崎市立図書館にて蔵書検索システムに障害が発生し、この際蔵書検索システムからクローラーで自動的に情報を収集していた男が偽計業務妨害容疑で逮捕された事件です。
この事件で男は勾留と取り調べの後、起訴猶予処分となりました。実際、男が使っていたクローラーは一定期間開けてからアクセスするように実装されていたのもあり、これが偽計業務妨害であることはおかしな話ではあります。マナーは守っていましたので。
警察側の無知が招いたことではありますが、法律に触れていなくても家宅捜索や起訴されるリスクがあることは頭に入れておき、慎重に行動することが大事でしょう。
Beautiful Soup
突然、Beautiful Soupという言葉が出てきましたが、これはスクレイピングを行う上で頻繁に使用するものです。
Beautiful Soupライブラリの名前です。このライブラリを使うことでより簡単にスクレイピングすることができます。
【本題】robots .txtについて
さて今回の記事の本題です。
現在、多くのWebサイトがスクレイピングの制御のためrobots.txtを設置しています。
GoogleのクローラーであるGooglebotがrobots.txtを制御に使用していることもあり、SEO対策や検索避け対策の観点を理由にrobots.txtを設置するサイトが増えています。
実践
実際に見てみるとどんなものか理解しやすいので見てみましょう。
Amazonのrobots.txtを見てみましょう。こちらのURLにアクセスしてみてください→ https://www.amazon.co.jp/robots.txt
Amazonのrobots.txtが見れるかと思います。以下のようになっています。
User-agent: *
Disallow: /dp/product-availability/
Disallow: /dp/rate-this-item/
Disallow: /exec/obidos/account-access-login
Disallow: /exec/obidos/change-style
Disallow: /exec/obidos/di
・・・略・・・
Allow: /wishlist/universal
Allow: /wishlist/vendor-button
Allow: /wishlist/get-button
Disallow: /gp/wishlist/
Allow: /gp/wishlist/universal
Allow: /gp/wishlist/vendor-button
Allow: /gp/wishlist/ipad-install
・・・略・・・
User-agent: EtaoSpider
Disallow: /
「User-agent: *」の部分は「すべてのユーザー」という意味です。
「Disallow: /dp/product-availability/」は/dp/product-availability/へのアクセスを禁止しています。
つまり、https://www.amazon.co.jp/dp/product-availability/へのアクセスすべてのユーザに対して禁止されています。一方でAllowはクローラーの作業を受け入れるページを指定するので「Allow: /wishlist/universal」はhttps://www.amazon.co.jp/wishlist/get-button へのアクセスを許可しています。
他にもCraw-Delayなどもあり、これはクローリングする間隔を指定していて、例えば「Craw-Delay: 10」であれば、10秒間隔でクローリングしろよっていうことを言っています。
補足
python3にはreppyというrobots.txtのパーサライブラリがあります。これを使うとrobots.txtに関しては簡単に確認できます。実際に使ってみる記事は今度書いてみようと思います。
【余談】最後に「つまりこの世にスクレイピングできないものはねぇのさ」とは
僕の好きな漫画ワンピースの冬島編に出てくるセリフのオマージュです。読んだことのない人はぜひ読んでみてください。
Dr.ヒルルクというキャラクターが言うセリフになります。彼はチョッパーに治らないとされた病気が治った話、奇跡の話をします。その時に言うセリフが「つまりこの世に治せねぇ病気なんてねぇのさ」というセリフです。チョッパーは彼の意思を継ぐことになります。何故、桜の画像があるかというのは読んでいただければわかるかと思います。