"polite"で守るWebスクレイピングのエチケット
Webスクレイピングの際には法律的なものなど、注意しなければならない点がいくつもあるが、それらの一部をサポートするR言語のパッケージ『polite』の紹介をする。
2020年12月5日に開催されたR言語の勉強会、「Japan.R」で発表した内容を掲載。
Webスクレイピングとは
Webスクレイピングとは、Webサイトから情報を抽出してくるコンピュータソフトウェア技術のこと。手作業でコピーアンドペーストしてもWebスクレイピングと呼ばれるという話もみたことがある。
便利な技術ではあるものの、法律など気をつけなければならない点が多数存在する。
以下はそのうちの一部。
politeパッケージとは
RDocumentationには「責任あるWebエチケットの推進」が目的であるとされているR言語のパッケージ。
このpoliteによるセッションには以下の3つの柱があると記載されている。
それぞれ雑に翻訳すると「取得許可の確認」「取得感覚を空ける」「確認を繰り返さない」と言える、と思う。これら基本的なスクレイピングのエチケットの遵守を、politeパッケージはサポートしてくれる。
ただし、個人情報保護、Webサイトの利用規約、著作権の問題など、politeを通してスクレイピングするだけでは解決できない問題もあるので、その点は別途注意しなければいけない。
politeパッケージの使用手順
ざっくり以下の4つ(3つ)のステップに分かれる。3番目のrvestはpoliteとは別のパッケージなので「4つ(3つ)」。
1,bow
ホストに対して自己紹介をする関数。
主な引数はurl、user_agent、delayの3つ。
UserAgentとはウェブサイトにアクセスするユーザーのOSやブラウザの情報などをまとめたもの。関数を実行することで、ホストにこれを送信する。これに加えて、自身の連絡先を載せておくと、何か問題があった際にホストが連絡を取りやすいのでより良い。
delayはスクレイピングの間隔を指定する。デフォルトだと5秒。あまり短い間隔でリクエストを送ってしまうと、相手側のサーバに高い負荷を掛けてしまうことになるので、適切な秒数を設定する。(1秒としている場合が多いようだが、適切な秒数が明確に示されている訳ではない???)
この取得間隔の設定が、RDocumentationにあった3本柱の1つ、「taking slowly」の実践となる。
session <- polite::bow(url = "https://www.cheese.com/by_type",
user_agent = "UAと連絡先の文字列を記載",
delay = 5)
また、bowでは指定したパスを取得して良いのか確認を行なっている。この許可は「robots.txt」というクローラーへの取得許可不許可を記載しているテキストファイルを確認しており、これが3本柱の2つ目、「seeking permission」の実践。
ちなみに、許可されていない場合は以下のように警告文が表示される。
2,scrape
実際に対象ページを取得してくる関数。
前のステップで作成したbowオブジェクトを渡すbowと、URLに追加するパラメータを指定するqueryが主な引数。
queryは以下の赤枠にあるように、list形式で渡し、それがbowで指定したパスにパラメータとして追加される。
scr_obj <- polite::scrape(bow = session,
query = list(t = "semi-soft", per_page = 100))
3,rvest
R言語でのスクレイピングで使用されるパッケージ。scrapeで取得したHTML Documentから必要な情報を抽出する。
使用方法などは以下の画像にある参考文献を参照。
result <- scr_obj %>%
rvest::html_node(css = "#main-body") %>%
rvest::html_nodes(css = "h3") %>%
rvest::html_text()
4,nod
nodは取得先のパスを変更する場合に使用する関数。
bowのurlを変更すれば、それでも良いが、ホストに対してUserAgentを繰り返し送信してしまうことになり、robots.txtもすでに取得しているので、それらを繰り返さない為にこちらを使用する。これが3本柱の最後の1つ、「never asking twice」。
主な引数はbowオブジェクトを渡すbowと、変更先のパスを指定するpath。
nod_obj <- polite::nod(bow = session,
path = "https://www.cheese.com/by_country")
まとめ
politeの手順と、politeの3本柱は以下の通り。
その他注意事項
以下のように、利用規約、個人情報、著作権など、注意しなければいけない点は多い。
スクレイピングや機械学習周りの法律専門の会社もあるので、頼ってみるのも手。
参考文献
Octoparse, 「Webスクレイピングとは?定義から応用までの説明」
https://www.octoparse.jp/blog/web-scraping/
PigData, IT弁護士に聞く「企業としてのスクレイピングは違法なのか?」
https://services.sms-datatech.co.jp/pig-data/2019/07/03/scrapinglaw/
R Documentation, 「polite package」
https://www.rdocumentation.org/packages/polite/versions/0.1.1
R Documentation, 「rvest package」
https://www.rdocumentation.org/packages/rvest/versions/0.3.6
アクセス解析ツール「AIアナリスト」ブログ,
「robots.txtとは?意味から設定方法まで詳しく解説」
https://wacul-ai.com/blog/seo/internal-seo/seo-robots-txt/
R Documentation, 「robotstxt package」
https://www.rdocumentation.org/packages/robotstxt/versions/0.7.13
文化庁, 「著作物が自由に使える場合」
https://www.bunka.go.jp/seisaku/chosakuken/seidokaisetsu/gaiyo/chosakubutsu_jiyu.html
Stimulator, 「Webスクレイピングする際のルールとPythonによる規約の読み込み」
https://vaaaaaanquish.hatenablog.com/entry/2017/12/01/064227
IT法務・AI・Fintechの法律に詳しい弁護士|中野秀俊, 「【スクレイピングと法律】スクレイピングって法律的に何がOKで何がOUTなのかを弁護士が解説。」
https://it-bengosi.com/blog/scraping/
PigData, 「【スクレイピング】違法にならないサービスパターン5選」
https://services.sms-datatech.co.jp/pig-data/2020/01/15/scrapinglaw3/
「Intro to {polite} Web Scraping of Soccer Data with R!」
https://ryo-n7.github.io/2020-05-14-webscrape-soccer-data-with-R/
石田 基広, 市川 太祐, 瓜生 真也, 湯谷 啓明, シーアンドアール研究所,「Rによるスクレイピング入門」
https://www.amazon.co.jp/dp/486354216X
松村 優哉, 湯谷 啓明, 前田 和寛, 紀ノ定 保礼, 技術評論社,
「RユーザのためのRStudio[実践]入門−tidyverseによるモダンな分析フローの世界−」
https://www.amazon.co.jp/dp/4774198536
終わり
スライドはこちら。
https://speakerdeck.com/bk_18/web-scraping-with-polite-package