データ収集のニーズが拡大
――本書『Pythonによるクローラー&スクレイピング入門』はデータ収集の需要に応える形で書かれた解説書ですが、実際にお二人は需要が増していると体感されていますか?
横山:自分自身は業務でクローリングに携わっているので身近ですが、ネットでもそういう声を見かけることが増えました。その理由として、機械学習ブームが大きい気がします。たとえば自然言語処理でも、Twitterのツイートを収集してデータ分析するのが有効ですからね。
加藤:機械学習の教師データとして画像を用意する場合も大量の画像が必要だと言います。それらをいちいち手で検索して右クリックして保存、なんて途方もない作業はやっていられません。なので、クローリングで画像を自動的に集める必要があるわけですね。
横山:いきなり需要が増えた印象があるのも確かです。一昔前だとクローリングのためのサーバーを用意しなくてはならず、その運用もあったので、コードを書けば済むという状況ではありませんでした。ところが、最近ではAWSやGDPが登場してインフラが整い、サーバーサイドに詳しくないソフトウェア開発者でも苦労せずクローラーを動かせる環境が揃ってきました。
個人でなら大掛かりなインフラを用意しなくてもよかったかもしれませんが、業務でやるとすれば避けられません。インフラが手軽に使えるようになったことも、クローリング需要の拡大の一因だと思います。
あと、パブリックドメインなどオープンなデータが増えていることも挙げられます。昔からWikipediaや青空文庫などがありましたが、他にも政府や自治体から統計データなどが提供されるようになりました。今まで倉庫で眠っていたようなデータが、ネットにアップロードされる時代になったんです。
そこにちょうどデータ分析ブームが重なったため、分析技術を持ったエンジニアが増えました。そのため、ますますデータ収集のニーズが拡大しているように感じますね。
――そういう背景で書かれたのが本書というわけですね。本書にはどんな狙いがあるんでしょうか。
横山:データ分析をするエンジニアでも、手元にデータがないと仕事はできません。そういう人が、データ収集を自前でできるようになる助けになればいいなと思っています。
Pythonはデータ分析のライブラリが充実しているので、利用しているエンジニアも多いはずです。同じPythonでデータ収集もできるようになれば、収集から分析まで自分でできるようになりますよね。
加藤:Pythonにあまり馴染みがないエンジニアでも、クローリングをしてみたい人がいるでしょう。なので、本書ではPythonの基礎も学べるようにしています。
ただ、プログラミングがまったく初めてで、でもクローリングに関心があるという人には、本書はちょっと難しいと思います。そういう人は『スラスラわかるPython』(翔泳社)と併読してもらうといいですね。
――加藤さんはアプリ開発が専門ですが、そちらでクローリングが必要になることはありますか?
加藤:昔はインターネットに接続するアプリも少なく、そこまでネットワークやサーバーに関する知識がなくてもアプリ開発を行うことができました。しかし、今はクラウドなど外部の情報を集めて表示するアプリが多くなったため、どうしてもサーバーやデータ収集の知識が必要です。
詳しい人と組んで開発できるならいいんですが、1人でやらないといけない、1人でさくっとやりたいという場合もあるでしょう。なので、アプリエンジニアでもAWSやGDPを使いこなしてサーバーを自分で用意すると便利な場面があります。さらにクローラーを作れると、開発できるアプリの幅も広がります。
僕は個人で小規模のキュレーションアプリを作っているんですが、その際にもサーバーなどバックエンドとクローリングの知識が欠かせませんね。
横山:個人的にはエンジニア側がクローリング技術を持つことは大事だと思いつつ、情報発信しているウェブメディアやサイト側がフィードやAPIをもっと提供してくれるようになればいいと考えています。連携がよりスムーズになりますから、そのほうがお互いに幸せになれるのではと考えています。
そういう理由もあって、本書にはクローリングだけでなく、集めた情報でどうやってフィードやAPIを作るかという内容も書きました。
クローリングとスクレイピングの区別を心がける
――基本的なところですが、クローリングとスクレイピングの違いを教えていただけますか?
横山:クローリングは複数のサイトやAPIから提供されるデータを収集することを言います。スクレイピングはそうやって収集したデータやHTMLから、ノイズを除去して必要な対象要素を抽出することを指す場合が多いですね。
加藤:ただ、その定義が一意に正しいわけでなく、区別しない人もいます。本書の定義としては、クローリングは収集、スクレイピングは抽出、ということで使い分けています。
――実際にコードを書くときは、それぞれの違いを意識したほうがいいんでしょうか。
横山:一緒くたにしないほうがいいとは思います。HTMLからスクレイピングするコードを書いたとしても、サイト側がフィードを提供してくれるようになったらそれをクローリングしたほうがいいんです。なので、機能ごとに分けて書くのがいいですね。
定番としては、対象からデータを収集する機能、収集したデータをストレージに置いておく機能、ストレージから必要なデータを抽出する機能、この三つを分けることが多いと思います。
私がまだ初心者だった頃、その全部を一つにまとめたコードにしたことがありました。依頼者からは対象サイトからデータを収集できるだけでいいと言われるんですが、たいていはそのクローラーを別のサイトにも使えないかと訊かれます。
そうするとクローラーを継続的に修正する必要がありますが、特定のサイト専用に作ってしまうと修正するのが難しくなります。なので、クローリングとスクレイピングなど、ある程度は機能を分けて書くのがいいと思います。
データの収集から利用までトータルで解説
――本書の内容について教えてください。
横山:データを収集して、そのデータから必要な要素を抽出し、どう利用するか。そこまで一貫して解説しました。また、継続的にクローラーを利用していくための管理画面の使い方、実行状況をログに出す方法なども紹介しています。
加藤:クローリングとスクレイピングするだけで終わってしまう解説書もありますが、本書では抽出したデータをどうやって保存・管理し、活用するかにまで踏み込んでいます。APIを作って他のアプリで利用したりサイトで公開したりする手法も解説しました。つまり、データの活用に重きを置いています。
横山:私がクローラーを開発し始めた頃、こういうことも知っておきたかったと思ったことを詰め込んだ結果ですね。クローリングの方法だけなら、世の中に情報はたくさんあります。でも、その仕組みを使い続け、価値を生み出す方法を体系的に説明しているサイトや本は少ないと思います。
そうしたことは、おそらく教えてもらう機会も多くないはずです。なので、開発未経験の新入社員がクローラーを作るとなったとき、データ収集だけでなくトータルの視点でクローリングをどう活かすのかを教えられるような本にしました。
――たしかにクローリング自体が目的になることはほとんどありませんよね。何らかの目的があってデータを収集したいわけですから。
加藤:そのとおりで、データがあるだけでは価値がありません。どのように使うかが重要です。
横山:業務ノウハウは狙って調べることが難しいので、クローラーを活用する周辺技術も解説している点に、本書の特徴があると思いますね。私自身、失敗しながら学んできましたらから、その苦労をしないためにぜひ本書を読んでもらいたいです。
Webエンジニアが触れておくべき言語
――Pythonについても訊きたいんですが、日本でも機械学習やデータ収集はPythonが主流になったとお考えですか?
横山:Rubyを使う人もいますが、Pythonの勢いは確かですね。Rubyが流行り出した頃のPythonは日本語が扱いづらかったんですよ。文字列処理といえばRybyで、コミュニティも強かったですし。
加藤:最近は完全にPythonが追い越した感じがします。
横山:それはデータ分析と機械学習のライブラリがかなり充実してきたのと、Python 3系になって日本語の扱いが容易になったことが挙げられます。そのうえで、スクレイピングに関してもBeautifulSoupやlxmlという便利なライブラリがあります。
データ収集から分析までPythonで完結できれば作業がスムーズになりますから、Pythonでのクローラー開発が主流になったのではないかと思います。あと、Googleの社内言語にPythonが使われていることも、信頼性の面で大きいかもしれません。
Pythonは大学での教育言語で使われてきた実績もありますし、用途が幅広いですよね。機械学習やデータ収集、科学計算の他、ホビー系のプログラミング、3DCGソフトウェアのスクリプト処理にも使われています。
――横山さんはPythonが好きなんですか?
横山:好きですね。いろんな書き方ができる言語のほうが好きな方もいると思いますが、Pythonは覚えることが少なくて、誰が書いてもだいたい一緒のコードになるのが好みです。
ちょっと前まで「Pythonねぇ……」と敬遠する人がいましたが、そんな人でもPythonを触るようになってきましたよね。
それと、日本のPythonコミュニティにはPythonがまだその他扱いだった頃、Rubyがすごいと言われていた時代から使ってきた人が多くて、質問するととても丁寧に答えてくれます。そういう部分も含めて好きなんです。
加藤:僕もスクリプト言語といえばRubyで、「Pythonなんて」と思っていた側です(笑)。でも、Pythonのライブラリが充実してきて、便利な環境が整ってきました。今は「Pythonすごい」と思っています。ようやく日の目を浴びた感じですね。
横山:あのまま消えていくのかとすら感じていましたから、今や、と感慨深いですね。
――翔泳社でもPython本は2009年と2013年に刊行しただけで、今年8月の『スラスラわかるPython』が久々の刊行となりました。さらに本書も登場しましたし、注目の言語となっています。
加藤:他社でも急にPython本が増えましたよね。本屋に行けばPythonコーナーがあるくらいです。機械学習やクローリングがメインで、入門書も充実してきています。Webエンジニアが触れておくべき言語の上位に入るくらいにはなったのではないでしょうか。Goより活躍する領域が多いかもしれません。
動的サイトもスクレイピングしやすくなった
――本書の内容に関して、気になるトピックはありますか?
横山:一つはクローラーフレームワークのScrapyです。最低限、抽出対象の定義と、どのようにリンクをたどるかの定義だけをすれば手軽にクロールが始められます。
「とりあえず最新情報の検知・収集だけできればいい」といったケースでは、並列リクエスト処理も、リクエスト間隔を空ける処理も、Cookieの扱いも面倒なところはフレームワーク任せにできるため、開発工数が少なくて済みます。デフォルトでCSV、JSON(JSON Lines)、XMLへの出力機能がついているのも大きな魅力だと思います。
もう一つ、Chromeにヘッドレスブラウザの機能がついたことです。Firefoxでもヘッドレスモードが使えるようになりましたが、これによってJavaScriptを使用したページのスクレイピングが容易になりました。
経験者に訊くと、JavaScriptを使用するような動的なサイトのスクレイピングは不安定で、安定的に行うにはけっこうなノウハウが必要だそうです。しかし、ヘッドレスブラウザによって、自分たちがブラウザで日常的に見ている内容をそのまま収集できることになります。
加藤:要するに、動的サイトでJavaScriptを動かした結果を抽出できるわけですね。
横山:ただ、本書でも自前で動的サイトを作ってスクレイピングするという流れで説明しているように、あんまりおおっぴらに言える内容ではないんです。
加藤:サイトを作っている側としては、動的サイトは閲覧者に見せる情報をいろいろ変えたいからという理由の他に、スクレイピングさせたくないという理由もあるからです。そのため、「そういうサイトもスクレイピングできる」と大声では言いづらいわけですね。
ただし、スクレイピングする側としては大きな需要があるのは事実です。
横山:そういう部分も含めて、本書では様々なノウハウを紹介しているので、きっと新しい発見があると思います。Pythonを使ったことのある人だけでなく、使ったことのない人にも読んでもらえるといいですね。
加藤:主な対象読者はWebエンジニアやサーバーサイドエンジニア、そしてデータサイエンティストではありますが、僕のようなスマートフォンアプリエンジニアが読んでもいいと思います。作れるアプリの幅が広がるはずです。実際に僕自身、横山さんが書いた「Part2 応用編」はとても勉強になりました。