IT

【python】BeautifulSoupでウェブサイトからデータスクレイピングする方法

まえおき

  • ウェブサイトからデータを取得するスクレイピングが流行っているらしい。
  • しかし、初心者の方にもわかりやすい説明がされている文献があまりない。
  • そこで今回は、スクレイピング初心者の方にもわかりやすいように、ウェブサイトでスクレイピングしデータ取得するまでを丁寧に説明する。

これから説明するスクレイピングは、使い方によっては不正アクセス偽計業務妨害に問われる可能性があります。これらの法律などを熟知してからこの先に進んでください(詳細はこちらのサイトを確認してください)。

またスクレイピングで得たデータを利用する際は十分に注意してください。

今後、このサイトで紹介したスクレイピングによって罪に問われた場合において、当サイトでは一切の責任は負いませんのであらかじめご承知おきください。

早速、今回使用するプログラムを紹介

では早速、今回使用するプログラムはこちらになります。

 

では、ここからはより詳細にプログラムを見ていきましょう。

 

より詳細な説明

今回のプログラムの処理フローの説明

より詳細な説明をする前に、今回のプログラムでやっていることを簡単に説明します。

【目的】日向坂46のメンバースケジュールをcsvファイルで取得したい

  1. 日向坂46のスケジュールが記載されている公式サイトを確認。
  2. 公式サイトのHTMLからスケジュールのタグを確認。
  3. BeautofulSoupを使ってスケジュールのテキストに変換。
  4. 取得したテキストをcsvファイルに書き込む。

こんな感じの流れになります。(あくまで勉強目的であって、決してストーキング目的ではないので、その辺は悪しからず。。。)

開発環境 & pythonライブラリインストール(Google Colab以外の場合)

今回はGoogle Colaboratoryを使用して説明していますが、AnacondaVisual Studio Codeでも必要なライブラリをインストールすれば使えます。

csvライブラリは標準でインストールされているので、requestsとBeautifulSoupをまずはインストールしましょう。

Google Colaboratoryを使用しない方は以下のコマンドをコマンドプロンプト、またはターミナルで実行してください。

 

もしかしたら、Visual Studio Codeを使用したことがない方やライブラリのインストール方法がわからない方がいるかと思います。

そういう方は以下のサイトで詳しく説明しているので、そちらを参照してから先に進むことをおススメします。

【初心者でも解る】VSCodeでライブラリ簡単インストール〜後編〜今回はVSCodeを使ってpythonの色々なライブラリを簡単にインストールしてく方法についてご紹介してきます。セットアップについては前回記事にしましたのでまだ見ていない方はそちらもご覧になってください。...

requests.get(url)

requests.get(url)では、引数に与えられたurlのrequestsオブジェクトを取得することができます。

ここでrequestsオブジェクトとは、サイト内にある様々なデータのことです。これにはurl属性やステータスコード、さらにレスポンスヘッダ等、様々なものが含まれます。

BeautifulSoup(response.content, “html.parser”)

BeautifulSoupは、HTMLをタグ単位で解析するモジュールです。ここでいうタグ単位とは、divやli等のことです。指定したタグ内のデータを自動で取得することをスクレイピング、というイメージで良いです。

では、実際にHTMLタグを確認してみましょう。日向坂の公式サイトに行き、スケジュールというところをクリックすると以下のような画面になると思います。

 

この画面の状態から、デベロッパーツールを起動させます。chromeを使っている方は「Fキー」+「F12」で起動できます(↓のように)。

 

HTMLを見てみると、欲しいデータのタグは「ul」と「a」タグ内にあることが確認できました。

 

このようにして、欲しいデータをHTML内から探し出し、BeautifulSoupで解析するといった流れになります。

また、引数であるresponse.contentは、先ほど取得したresponseをバイナリーデータに変換します。

さらにhtml.parserは、HTMLの解析器のことです。バイナリ化されたHTMLを解析します。基本、html.parserで大丈夫ですが、このほかにもlxmlやxmlなどあるのでこちらも押さえておきましょう。

  • lxml・・・高速に処理することが可能
  • xml・・・XMLに対応。なおかつ高速に処理することが可能
  • html5lib・・・最新バージョンのHTML5を処理する際に使用するパーサー

soup.find(“ul”, attrs={“class”: “p-news__list p-news__list–long”}) & soup.find_all(“a”)

soup.find()は、引数1に指定されたタグをHTML内から探し、一番最初に見つかったタグについてデータを返します。引数2は欲しいデータのclass名とIDを指定します。

一方、soup.find_all()は引数に指定されたタグと一致するタグ内データをすべて取得します。

soup.find()とsoup.find_all()の違いは、最初に見つかったタグ内のデータを取得するか、一致するすべてのタグ内データ全てを取得するかどうか

entry.get_text()

enumerate(entries)で取得したデータを、テキストファイルとしてリストに格納します。

with open(“schedule_data.csv”, “w”, encoding=”cp932″) as f:

これまでに取得してきたデータをcsvファイルとして書き出すために、with open関数を利用しています。

既にいろんなサイトで紹介されているので、あえてここで紹介しませんが、引数1でファイル名を指定、引数2で書き込みモード”w”を指定、引数3はエンコーディングを指定します。

私の環境では「shift_jis」がうまく使えなかったので、「CP932」を使用しています。詳しく知りたい方は、こちらのサイトを参照してください。

 

すべての開設を反映させた結果

さて、これまで説明してきたプログラムをコメント付きで再度確認します。

 

そして、csvファイルに出力されたデータを確認してみます。ここまで問題なくできると以下のようにデータが出力されます。

これで終了です。お疲れ様でした。

 

さいごに

今回は、スクレイピング初心者の方にもわかるように、BeautifulSoupを使ってウェブサイトからデータスクレイピングする方法を紹介しました。

副業でデータ分析企業案件でスクレイピングをする機会は増えていますので、他の人に負けないように、基礎を身に着けておくようにしましょう。

今回スクレイピングについて紹介しましたが、クローラーを言うものも頻繁に使用されます。こちらについては後日記事を書きたいと思いますので待っていていください。

また、今回参考にした書籍を以下に貼っておきますので、気になる方はぜひ読んでみてください。

 

それでは~

ABOUT ME
Toru
普段は会社員をしながらブログを書いてます。 文章力を上げるために始めたブログです。 主に家電/ガジェット系、プログラミングに関する記事を書きますが、たまに生活雑貨や投資信託関連の記事も書きます。初心者の方にもわかりやすく記事を書きます。 質問にもなるべく回答したいと思いますが、質問内容によっては答えかねる場合もあります。 お問い合わせ先:fearandloathinginlasvegas.toru@gmail.com

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です