競争他社の価格を追跡、ビジネス分析などのデータ関連プロジェクトを実施する場合、常にWebサイトからデータをエクセルに取り込みして、分析することが多いですね。ただし、データを1行ずつコピペするのは時代遅れになり、そのコピペの作業を実行する、すなわちWebスクレイピングにおけるニーズが高まっています。この記事では、Webデータを自動収集する方法として、最も人気のPythonでWebスクレイピングを行う方法を説明します。
はじめに
Webスクレイピングとは、Webサイトからデータを自動抽出するのに役立つ技術です。Webスクレイピング技術と考えると、一番思いつきやすいのはプログラミング言語の使うことでしょう。世の中には様々な言語がありふれていますが、スクレイピングはどの言語でやるのが有効なのでしょうか?こちらの記事をご参考ください。今回は主流のPythonを活用してWebクローラーを自作することになります。
では、なぜPythonが選ばれた言語なのでしょうか?
- 柔軟性:私たちが知っているように、Webサイトはよく更新されます。コンテンツだけでなく、Web構造も頻繁に変更されます。Pythonは動的に入力可能で生産性が高いため、使いやすい言語です。したがって、Pythonはコードを簡単に変更し、Webサイトの更新速度に追いつくことができます。
- 強力:Pythonには、有用で成熟したライブラリがたくさんあります。例えば、Requests、BeautifulSoupは、URLを取得し、Webページから情報を引き出すのに役立ちます。Seleniumは、Webクローラーが人間のブラウジング動作を真似できるようにすることで、一部のスクレイピング防止手法を回避するのに役立ちます。さらに、re、numpy、およびpandasを使用して、データのクリーンアップと処理を行うことができます。
それでは、PythonによるWebスクレイピングの旅を始めましょう!
ステップ1:Pythonライブラリを実装する
この記事では、BeautifulSoupとRequestsの2つのライブラリを使い、Yelpからレビューをスクレイピングする方法を例として示します。これらの2つのライブラリは、PythonでWebクローラーを構築する際に一般的に使用されます。最初のステップは、この2つのライブラリをPythonにインポートして、これらのライブラリの関数を使用できるようにすることです。
ステップ2:WebページからHTMLを抽出する
「https://www.yelp.com/biz/milk-and-cream-cereal-bar-new-york?osq=Ice+Cream」からレビューを抽出しようとします。まず、URLという変数にそのURLを保存します。次に、このWebページのコンテンツにアクセスし、Requestsでurlopen()関数を使用して、HTMLを「ourUrl」に保存できます。
それで、BeautifulSoupを使ってWebページを解析します。
このWebサイトの生のHTMLである「Soup」ができたので、prettify()と呼ばれる関数を使用して生データを消去し、それを印刷して「Soup」のHTMLのネスト構造を確認できます。
ステップ3:データを抽出する
次に、このWebページでレビューのHTMLを見つけて抽出し、保存します。Webページの各要素には、唯一のHTML「ID」があります。IDを確認するには、Webページでそれらを検査する必要があります。
「Inspect element(要素の検証)](「Inspect(検証))をクリックすると、レビューのHTMLが表示されます。
この場合、レビューは「p」というタグの下にあります。そのため、まずfind_all()という関数を使って、これらのレビューの親ノードを見つけます。そして、ループ内の親ノードの下にタグ「p」を持つすべての要素を見つけます。すべての「p」要素を見つけたら、それらを「review」という空のリストに保存します。
これで、そのページからすべてのレビューを取得できます。いくつのレビューを抽出したか見てみましょう。
ステップ4:データを処理する
各レビューの最初に「<p lang = 'en'>」、レビューの途中に「<br/>」、およびレビューの終わりに「</ p>」などの役に立たないテキストがまだあることに注意する必要があります。
「<br/>」は改行を表します。レビューに改行を入れる必要はありませんので、削除する必要があります。また、「<p lang = ’en’>」と「</ p>」はHTMLの始まりと終わりであり、これらも削除する必要があります。
最後に、20行未満のコードですべてレビューをきれいに取得しました。
以上はYelpから20件のレビューを収集するデモです。しかし、実際の作業ではより複雑な状況がありますね。例えば、この店のすべてのレビューを抽出するには、次のページに移動するが必要あります。また、投稿者、住所、投稿時間などのほかの情報を収集する必要もあるかもしれません。
より多くのデータを取得するには、上記の操作を実装し、Seleniumや正規表現などの関数とライブラリをさらに学習しなければなりません。Webスクレイピングの課題を掘り下げるのにはより多くの時間を費やすようになりました。
まとめ
Pythonのようなプログラミング言語以外に、APIまたはOctoparseのようなスクレイピングツールでもWebスクレイピングを行うことができます。AirbnbやTwitterなどの大規模サイトの場合、サイトにある情報をできるだけ広く共有するために、企業、開発者、利用者にAPI を提供しています。ただし、全てのサイトはAPIサービスを提供するわけではありません。APIを提供しても、目標のデータではない場合もあります。したがって、スクレイピングツールは強力で柔軟なソリューションになります。
関連記事:
Python vs Octoparse!初心者向きのスクレイピング方法はどっち?