プログラミング初心者がスクレイピングについて調べてみた

#導入
学校のIoT実習で学んだことを生かし、いろいろ便利なものを作ってみたいと思ったのだが、調べていくうちに、**スクレイピング**ということをすると、Webサイトから簡単に情報が集められるということを知った。
しかし、サイトによってはこれが**許可されていない**などの事もあるようで、今回はスクレイピングとは何か、注意点は何かについて調べたことをまとめていく。

#スクレイピングとは？
スクレイピングとは、**Webサイトから情報(データ)を取得**し、その中から、自分が必要とするデータを**抽出**することである。(特にこれをWebスクレイピングという)

スクレイピングは手作業ではかなり大変であるが、これをプログラムで自動化すると、例えば、サイト上にある株価などの統計情報を自動で取得し、競合分析などのデータ解析に用いたり、機械学習に必要になるような膨大なデータを自動で集めたりなど、Webサイト上にあるデータを簡単に扱うことができるようになる。

例えば電車の運行情報の中で、京阪線のものが欲しいとする。
Webサーバー側にリクエストを送信し、いくつかの路線に関するレスポンスのデータが返ってくるが、この複雑なデータの中から、スクレイピングを行うことで欲しいデータだけを抽出できる。
(※イメージです)
![無題213_20211224125817.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2386155/69e96120-80d4-2134-4a8b-40facecd8433.png)



#スクレイピングの注意点
一見すると便利なスクレイピングであるが、実際行うときは注意点がいくつかある。

:::note alert
逮捕や裁判沙汰になるようなケースもあるため、特に気を付けること。
:::
##相手側のサーバーに負荷を掛けない事
スクレイピングは**相手のサーバーに入り込んで、データを取ってくる**ということです。つまり、**短時間**に**何回**もスクレイピングを行うと、相手側のサーバーに負荷を掛け、サーバーをダウンさせることにつながる。

##スクレイピングが許可されているか確認すること
Webサイトによっては許可されていないことがある。どうやって確認すればいいのかは以下に示す。
###確認方法
相手のWebサイトのルートディレクトリ(簡単に言えば.comとか.jpとかのドメイン名直下)にある、「robot.txt」及び「robots.txt」にアクセスして、許可情報を調べる。
例として[Yahoo!乗換案内](https://transit.yahoo.co.jp/)を使用する。

1. ブラウザでページを開き、アドレスバーにあるURLの後ろに「/robots.txt」または「/robot.txt」を追加する。

```
https://transit.yahoo.co.jp/robots.txt
```
![無題211_20211223232145.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2386155/db3b2742-c15b-7824-f38b-1f032314e557.png)

2. おそらくこのようなものが表示される

```
Sitemap: https://transit.yahoo.co.jp/sitemap/index.xml
Sitemap: https://transit.yahoo.co.jp/sitemap/navi_index_01.xml
Sitemap: https://transit.yahoo.co.jp/sitemap/navi_index_02.xml
Sitemap: https://transit.yahoo.co.jp/sitemap/navi_index_03.xml
Sitemap: https://transit.yahoo.co.jp/sitemap/navi_index_04.xml
Sitemap: https://transit.yahoo.co.jp/sitemap/navi_index_05.xml
User-agent: *
Disallow: /*.xap$
Disallow: /*.png$
Disallow: /*.dat$
Disallow: /diaedit
Disallow: /stedit
Disallow: /edit
Disallow: /search$
Disallow: /diainfo/detail$
Disallow: /main/top$
Disallow: /search/result$
Disallow: /search/result
Disallow: /feedback
Disallow: /channel.html
Allow: /search/result?*&type=5&*
Allow: /search/result/
```
書かれている中で、Disallowとなっている部分がアクセス禁止の部分になっており、この部分はスクレイピングできない。

![無題212_20211223232711.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2386155/79c385d0-d2ca-fea2-0b3c-dccc1ced50ee.png)

(SitemapとUser-agentは今は気にしなくてもいい)

###robot.txtまたはrobots.txtが見つからない場合
ページの利用規約や、ヘルプをよく読むこと。[Yahoo!ファイナンス](https://support.yahoo-net.jp/PccFinance/s/article/H000011276)など、robot.txtがなくてもスクレイピングが禁止されていることもある。

#余談
###「robot.txt」及び「robots.txt」について
これらは、Webブラウザ側が収集されたくないデータを制御するファイルで、主に

* User-Agent
* Disallow
* Allow
* Sitemap

の4つの要素から構成されている。役割はそれぞれ

* User-Agent:誰からのアクセスを拒否するかを指定する要素
* Disallow:指定されたファイルへのアクセスをブロックする要素
* Allow:指定されたファイルへのアクセスを許可する要素
* Sitemap:サイトマップの場所をアクセスした人に伝える要素

となっている。

#参考文献

* データのじかん ([データ収集を大幅に効率化する「スクレイピング」とは？](https://data.wingarc.com/scraping-27053))
* Octoparse ([Webスクレイピング前に確認すべき10問](https://www.octoparse.jp/blog/10-questions-to-ask-before-proceeding-with-web-scraping/#))
* Alanalyst BLOG ([robots.txtとは？意味から設定方法まで詳しく解説](https://wacul-ai.com/blog/seo/internal-seo/seo-robots-txt/))
* PyQ ([スクレイピング、クローリングする時の注意点](https://docs.pyq.jp/column/crawler.html))
* 日本大学生産工学部マネジメント工学科知能情報システム工学研究室([スクレイピングとは？](http://int-info.com/index.php/scr00/))

#画像出典
* [いらすとや](https://www.irasutoya.com/)