データ分析関連メモ(メモです)

仲秋の候、涼やかな秋風の下、ご一同様にはその後お健やかにお過ごしのことと存じます。

"polite"で守るWebスクレイピングのエチケット

f:id:watagusa:20210101173645p:plain

Webスクレイピングの際には法律的なものなど、注意しなければならない点がいくつもあるが、それらの一部をサポートするR言語のパッケージ『polite』の紹介をする。

2020年12月5日に開催されたR言語の勉強会、「Japan.R」で発表した内容を掲載。

http://japanr.net/

 

Webスクレイピングとは

Webスクレイピングとは、Webサイトから情報を抽出してくるコンピュータソフトウェア技術のこと。手作業でコピーアンドペーストしてもWebスクレイピングと呼ばれるという話もみたことがある。

 便利な技術ではあるものの、法律など気をつけなければならない点が多数存在する。

以下はそのうちの一部。

f:id:watagusa:20210101173110p:plain

 

politeパッケージとは

RDocumentationには「責任あるWebエチケットの推進」が目的であるとされているR言語のパッケージ。

このpoliteによるセッションには以下の3つの柱があると記載されている。

f:id:watagusa:20210101173555p:plain

それぞれ雑に翻訳すると「取得許可の確認」「取得感覚を空ける」「確認を繰り返さない」と言える、と思う。これら基本的なスクレイピングのエチケットの遵守を、politeパッケージはサポートしてくれる。

ただし、個人情報保護、Webサイトの利用規約著作権の問題など、politeを通してスクレイピングするだけでは解決できない問題もあるので、その点は別途注意しなければいけない。

 

politeパッケージの使用手順

ざっくり以下の4つ(3つ)のステップに分かれる。3番目のrvestはpoliteとは別のパッケージなので「4つ(3つ)」。

f:id:watagusa:20210101174651p:plain

1,bow

ホストに対して自己紹介をする関数。

主な引数はurl、user_agent、delayの3つ。

UserAgentとはウェブサイトにアクセスするユーザーのOSやブラウザの情報などをまとめたもの。関数を実行することで、ホストにこれを送信する。これに加えて、自身の連絡先を載せておくと、何か問題があった際にホストが連絡を取りやすいのでより良い。

delayはスクレイピングの間隔を指定する。デフォルトだと5秒。あまり短い間隔でリクエストを送ってしまうと、相手側のサーバに高い負荷を掛けてしまうことになるので、適切な秒数を設定する。(1秒としている場合が多いようだが、適切な秒数が明確に示されている訳ではない???)

この取得間隔の設定が、RDocumentationにあった3本柱の1つ、「taking slowly」の実践となる。

f:id:watagusa:20210101175606p:plain

session <- polite::bow(url = "https://www.cheese.com/by_type",
                       user_agent = "UAと連絡先の文字列を記載",
                       delay = 5)

 

また、bowでは指定したパスを取得して良いのか確認を行なっている。この許可は「robots.txt」というクローラーへの取得許可不許可を記載しているテキストファイルを確認しており、これが3本柱の2つ目、「seeking permission」の実践。

f:id:watagusa:20210101175835p:plain

 

ちなみに、許可されていない場合は以下のように警告文が表示される。

f:id:watagusa:20210101175926p:plain

 

2,scrape

実際に対象ページを取得してくる関数。

前のステップで作成したbowオブジェクトを渡すbowと、URLに追加するパラメータを指定するqueryが主な引数。

queryは以下の赤枠にあるように、list形式で渡し、それがbowで指定したパスにパラメータとして追加される。

f:id:watagusa:20210101180444p:plain

scr_obj <- polite::scrape(bow = session, 
                          query = list(t = "semi-soft", per_page = 100))

3,rvest

R言語でのスクレイピングで使用されるパッケージ。scrapeで取得したHTML Documentから必要な情報を抽出する。

使用方法などは以下の画像にある参考文献を参照。

f:id:watagusa:20210101181039p:plain

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。

f:id:watagusa:20210101181320p:plain

nod_obj <- polite::nod(bow = session, 
                       path = "https://www.cheese.com/by_country")

まとめ

politeの手順と、politeの3本柱は以下の通り。

f:id:watagusa:20210101181712p:plain

 

その他注意事項

以下のように、利用規約、個人情報、著作権など、注意しなければいけない点は多い。

スクレイピング機械学習周りの法律専門の会社もあるので、頼ってみるのも手。

f:id:watagusa:20210101182142p:plain

 

参考文献

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法務・AIFintechの法律に詳しい弁護士|中野秀俊, 「【スクレイピングと法律】スクレイピングって法律的に何が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

 

終わり

f:id:watagusa:20210101182548p:plain


 

スライドはこちら。

https://speakerdeck.com/bk_18/web-scraping-with-polite-package