Lean Baseball

No Engineering, No Baseball.

コワクナイWebクローリング&スクレイピング - 初心者とPython使いのための作法とノウハウ

f:id:shinyorke:20190811161536j:plain
名著です,まじでオススメ

個人的にすごく気に入っているかつオススメな「Pythonクローリング&スクレイピング」の増補改訂版が出てました.

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

早速読みましたが,初版からのアップデートに加え元々の構成の良さに感激しました.*1

本の内容そのものの解説は,

をご覧いただくとして*2,このエントリーでは,

Webクローリングとスクレイピングはコワクナイヨ!

っていう話をルール・ノウハウという「お作法」の面でポエムしたいと思います.

TL;DR

  • インターネットおよび, リアル(現実世界)に迷惑をかけないようにやれば何ら問題ございません!
  • 具体的には, 法令・ルールに先人たちの知恵そして,「Pythonクローリング&スクレイピング」の第4章を正しく理解し, 実行できれば心配いらない
  • わかんない・怖いからって「スクレイピング・クローリングはしちゃダメ!」と思い込まないようにしよう(=わかんない・こわかったら学ぼう)

すごく雑に一言でいうと,

「他所様,特に著作者・提供者に迷惑をかけず, みんなハッピーであればWebスクレイピングとクローリングはコワクナイヨ!」

そういうことです.

おしながき

Webクローリング・スクレイピングによくある誤解

慎重・臆病な方や, 真面目な方(それは自分であっても他人であっても)はよく,

  • Webスクレイピング・クローリングは絶対にやっちゃいけないことだ!
  • 初心者のお前(もしくはわたし)がやるべきことじゃない!

的なありがた迷惑な指導・コメントとかお話をいただく(もしくは自分で思い込む)ことってよくあると思います.*3

少なくとも私はあります.*4

誤解その1「絶対にしてはいけないことだ!」

【答】法令・ルール・お作法を理解した上で正しくやっていれば全くもって問題ない,むしろ必要であればしましょう(断言)

大雑把に言ってしまうと,

  • 関連する法令・権利, 特に著作権・個人情報を理解し守ること
  • サイトの利用規約やrobots.txtを理解し守ること
  • サイトに負荷をかけない(落とすなんてもってのほか)

この3つさえ守れていればOKです.

この辺はネット上でググったり, 書籍を読んだりすると多かれ少なかれ触れていることであったりますので情報が集めやすいです.

「読む・学ぶの面倒くさい」と思わずしっかりやればOKなので着実にやりましょうねと.*5

誤解その2「初心者にとってハードルが高い」

【答】順番に少しずつ学んでやっていけば初心者でもできます,ただし着実に学んで少しずつやりましょう(でないと火傷する)

例えばいきなり,

  • 日本全国の天気予報を毎日取得する
  • 主要なネット企業の株価を追いかける
  • 欧州の主要なサッカーリーグの選手成績と結果を毎日取得して(ry

みたいな大きなことを考えてはじめると確かにハードルが高い・難しい・続かない(断念する)というオチになります*6が,

  • クローリング・スクレイピングに使う言語(PythonでもRubyでも何でも)を基礎から覚える
  • HTML・JavaScriptの読み方・作法を覚える
  • URL決め打ちでスクレイピングしてCSVファイルにするところからやってみる

...っていう用に順番にやっていけばコワクナイですし,出来ると思います.

細かくは触れませんが,言語・HTMLを覚えるのもちょっとずつスクレイピングしていくのも一個一個の作法・ルールはしっかり学べば難しい話ではありません.*7

中には「今すぐやりたい・実現したいから手っ取り早く教えてくれ」「近道は無いのか」的な方も多いと思いますが,

  • 中長期的に見た場合,自分でプログラミング言語を書いてHTMLを理解してなにかできたほうがお得*8
  • 言うてもクローリング・スクレイピングは複数の技術・ルールを使う総合格闘技なので習得には時間がかかるので近道は無いと思ったほうがよい
  • どうしても時間かかるのが嫌であればお金なり何なりかけて「人にやってもらう」方が早い

はずなのでかけられる時間・お金を考慮した上で決めてやりましょう.

真実「しなくて良いならやらない方が良い」

ただまあ, Webスクレイピング・クローリングは守るべきこと守ったらやってOK, 学べば出来ることだと思いますが,

他に代替手段があるのであればやらないに越したことはない,のは真実です!(これは誤解でもなんでも無い)

  • APIが公開されている(例:Twitter, Facebookほか)*9
  • データセットが公開されている(例:ウィキペディア, メジャーリーグベースボール*10ほか)

こういったものが「代替手段」...というより「本来のデータセット」として存在する場合はむしろ手を付けないほうが無難でしょう.

こわい・わからないを払拭する

Webスクレイピング・クローリングはやって大丈夫なこと,初心者・初学者でも(時間をかけて学べば)ハードルは高くない!

...と理解して頂いたところで,「こわい・わからない」を「コワクナイ, Webスクレイピング・クローリングチョットワカル」というステータスまでもっていくポイントに触れようかなと.

法令・ルールを正しく理解する

さっきもちょっと書きましたが,

  • 関連する法令・権利, 特に著作権・個人情報を理解し守ること
  • サイトの利用規約やrobots.txtを理解し守ること
  • サイトに負荷をかけない(落とすなんてもってのほか)

基本はこの3つを理解し,守っていけばOKです.

なぜかというと,

Webページを次々と取得するクローリングは、多少なりとも相手のWebサイトに影響を与える社会的な行為です。クローラーが相手の迷惑にならないよう、良識的な振る舞いをする必要があります。

引用元:「Pythonクローリング&スクレイピング」第4章

あなた(わたし)がベテランのエンジニア・データサイエンティストであろうが, 初心者・初学者・駆け出しエンジニア*11であろうが, 「Webクローリングが社会的な行為であることはかわらない」ので, 「今は学んでる最中だからいいや」的な解釈だけはしないように気をつけてほしいなと願います(切実).*12

著作権・個人情報・robots.txt...などなど,解説すると結構長くなるのでこのエントリーでは細かい言及はしませんが,Pythonクローリング&スクレイピング」第4章をしっかり理解し実現できたら問題ないと思います!(断言)

なお, Webの記事ですとvaaaaaanquishさんがいい感じにまとめてくださっているのでこちらが参考になるかと思います.

vaaaaaanquish.hatenablog.com

また,これは主に外(自宅以外の場所,職場や勉強会・イベント会場など)で起こった実際の事件・リスクの話もあるのでこちらも合わせて読んでもらえると良いかもしれません(手前味噌).

shinyorke.hatenablog.com

仕組み・FWでカバーする - Scrapyなど

これは初心者・初学者というより, 実際に運用したりする人向けですが...

実際にクローラーを作って運用すると,

  • 大量のリクエスト送ったりしてないか?
  • robots.txtとかルール無視でやったりしてないか??
  • 同時リクエスト数とか間隔を自分でコントロールするのが辛い

的なのが出てくると思います,これも「こわい・わからない」の一種かなと.

昔の人(自分含む)であれば自分で組んでなんとかするのですが, 最近はScrapyという便利なFWのおかげでこれらも大抵の場合なんとかなったりします.

私も結構Scrapyのお世話になっていて,試したり運用した結果はこんな感じです.

shinyorke.hatenablog.com

qiita.com

実はこれらのお試し・運用の手本にしたのが, 「Pythonクローリング&スクレイピング」の初版でして,

  • 大抵のチューニングは自分で実装しなくても大丈夫, scrapyなら
  • setting.pyはそのまま使っちゃだめ

というのが第6章にガッツリと掲載されているのでこれらを参考にしながらやるといい感じかと思います.*13

「Pythonクローリング&スクレイピング」の感想

データサイエンスにしても,お仕事での運用にしても, Webクローリングとスクレイピングは重要なスキルですし,自分がやらなくても知っておいた方が良いことかと思います.

そういった意味では網羅性が高く,サンプル・解説ともに実運用で真似できる作法・ノウハウが詰まった「Pythonクローリング&スクレイピング」はメチャクチャオススメです!

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド

個人的にはこれらの本や先人たちが残したノウハウを元に,正しく・清らかにWebクローリング・スクレイピングがされるような世の中になることを祈っています.

気になる方はぜひお盆の期間に試してみてはいかがでしょうか?

*1:ちなみに,こちらは技術評論社さまのご厚意でいただきました,誠にありがとうございます :pray:

*2:加藤さん, iketakahiroさん共に, 初版との比較, 差分やこだわりポイントをご紹介されています.ぜひ読んでほしいです!

*3:いわゆる老害案件のひとつ.

*4:これは公私共にあった実話です,都度ルールや法令を確認・学んで「そんなこたあない」「(趣味プログラミングであれば)やらかしてもワイの責任だから黙っててもらっていいすか?(威圧感)」的な切り抜け方をしてました,っていうノウハウの塊がこのエントリーです

*5:といっても聞かない人には「ネットサーフィンもクローリングみたいなもの」「ブラウザでWebページ開くのもスクレイピングですよ」と言ってやりましょう, 屁理屈に聞こえるかもですが広義の意味でクローリングでありスクレイピングであることには変わりません(人力か自動でやってるかの違いだけであって).

*6:ハンズオンとかチュートリアル的なのを見てるとよく思う

*7:これがSPA(シングルページアプリケーション)のスクレイピングだったり, 複雑なクローリングであればそうはいかないかもですが, 一個一個のことは初心者本やWebに落ちてる情報だけでも十分学べます,要は根気よく学んでモノにできるかどうか,それだけです.

*8:エンジニアはもちろんのこと, データサイエンスの人や営業職などエンジニア以外の人も退屈なことをPythonとかプログラミングにやらせる,という文脈で覚える・実践するような内容と被ってるのでやっといてお得だと思います.

*9:手続きが面倒くさいから嫌...っていうお気持ちもわかりますが,APIが用意されているものはAPIを使うのが筋ですし, スクレイピングと前処理はJSONやXMLでやってくるAPIの方が334倍楽です.

*10:「野球のデータって無いんですか?」と商売柄よく聞かれますが, メジャーはbaseball savant, retrosheet, sean lahmanと公開されているデータセットだけでかなりのことができます, スクレイピングしなくても

*11:最近この言葉よく見るけど起源どこなんだ!?ってのとそもそも駆け出しエンジニアとは

*12:Webクローリング・スクレイピングに限らずですが,インターネットの外に出るということは公道に出て車を運転したりすると同じくらいの社会性が必要,ということです.駆け出しエンジニアであったとしても.

*13:ほんと,よくここまで書いてるなーと感心しました,感謝感激.