ChatGTP スキルアップ プログラミング学習

【プログラミング】ChatGPTと進める!Pythonスクレイピング実践編

記事内に商品プロモーションを含む場合があります

前回の記事では、Pythonを使ったスクレイピングの基本をChatGPTと一緒に学びました。
前回記事、【プログラミング】ChatGPTで学ぶ!Pythonスクレイピング入門
初めてのスクレイピング体験で、Webページからデータを抽出するプロセスを理解できたと思います。しかし、実際のプロジェクトでは、単一ページのデータ取得だけでなく、複数ページにわたるデータ収集や特定の情報を効率的に抽出するスキルが求められます。今回は、こうした実用的なスキルに焦点を当て、より具体的なスクレイピングのプロジェクトに取り組んでいきます。スクレイピングの基礎を固め、次のステップへと進む準備はできていますか?これから、データ収集の効率を飛躍的に高める方法を一緒に学んでいきましょう。

Pythonの始め方についてはこちらの記事を参考にしてみてください!!

ブログ内のコードはコピーして使用できます

スクレイピングって何?

スクレイピングとは、ウェブサイトから自動的に情報を集める技術のことです。たとえば、あるウェブサイトにたくさんのデータが載っているときに、そのデータを一つ一つ手でコピーするのは大変ですよね。スクレイピングを使えば、プログラムがその作業を自動で行ってくれるので、時間を節約できるんです。Pythonというプログラミング言語を使って、こうしたデータを簡単に集めることができます。

スクレイピングの注意点

必ずチェックしてください
スクレイピングを行う際には、技術的な側面だけでなく、倫理的・法的な側面にも十分な注意を払う必要があります。以下に、スクレイピングを行う際の主な注意点をまとめました。

1. 利用規約と法令を確認する

  • 利用規約の遵守: ウェブサイトには利用規約が設けられていることが多く、スクレイピングが明示的に禁止されている場合があります。必ず利用規約を確認し、スクレイピングが許可されているかどうかを確認しましょう。
  • 法令の遵守: スクレイピングが違法行為とみなされるケースもあります。特に、データの著作権やプライバシーに関する法令を遵守することが重要です。

2. robots.txtの確認

  • robots.txt: ウェブサイトのルートディレクトリには「robots.txt」というファイルが設置されていることがあり、これはクローラーがアクセスして良いページや禁止されているページを指定するためのファイルです。スクレイピングを行う前に、このファイルを確認して、クローラーがアクセスを許可されているページのみを対象にするようにしましょう。

3. 過剰なリクエストを避ける

  • サーバーへの負荷: 過剰にリクエストを送信すると、対象サイトのサーバーに過度な負荷をかけてしまう可能性があります。リクエストの間隔を空ける(スリープタイムを設ける)、少量のデータを定期的に取得するなど、相手のサーバーに負荷をかけないように注意しましょう。
  • リクエストのペース: 一度に大量のリクエストを送ると、サーバーからIPブロックされることがあります。これを防ぐため、リクエストのペースを制御し、一定間隔を保つようにしましょう。

4. APIの利用を検討する

  • 公式APIの利用: 多くのウェブサイトでは、スクレイピングの代わりにAPIを提供しています。APIを利用することで、データをより安定的かつ合法的に取得することができます。APIが提供されている場合は、まずAPIの利用を検討しましょう。

5. 個人情報や機密情報の扱い

  • プライバシーの尊重: スクレイピングによって取得したデータに個人情報が含まれている場合、個人情報保護法などの規制に従う必要があります。個人情報や機密情報を扱う際は、特に慎重に対応しましょう。

ポイント

ChatGPTにサイトの利用規約をコピーして、貼り付けます
『スクレイピングを禁止されていますか?』『利用規約を要約してください』とお願いすると丁寧に教えてくれます
ChatGPTを使用している方はぜひ活用してみてください!!

スクレイピングおすすめサイト

今回活用するサイト

スクレイピングする本

ステップ5: 特定のデータの抽出

目標

https://books.toscrape.com/ のウェブページから、特定の要素(例: 書籍のタイトルや価格)を抽出する方法を学びます。

手順

  1. ページ内の特定の要素を見つける:
    • BeautifulSoupを使って、特定のタグやクラス名、IDを持つ要素を見つけます。
  2. データの抽出:
    • 抽出したい要素からテキストや属性(例えば、リンクのURL)を取り出します。

例: https://books.toscrape.com/ から書籍のタイトルと価格を取得

以下のコードを使用して、このサイトから書籍のタイトルと価格を抽出してみましょう。

ポイント

  • soup.find_all('article', class_='product_pod'): 書籍情報が格納されている<article>タグをすべて取得します。これらのタグには、クラスproduct_podが付いています。
  • item.h3.a['title']: 書籍のタイトルを取得します。この情報は<h3>タグの内部の<a>タグのtitle属性に格納されています。
  • item.find('p', class_='price_color').get_text(strip=True): 書籍の価格を取得します。この情報は<p>タグのクラスprice_colorに格納されています。

出力

スクレイピングで、本のタイトルと価格の部分だけを丁寧に出力をしてくれました。
では、次は複数ページのデータ収集をやっていきます。

ステップ6: 複数ページのデータ収集

目標

複数ページにまたがるデータを自動的に収集する方法を学びます。

手順

  1. 次ページのリンクを取得:
    • 現在のページから次のページのリンクを見つけます。
  2. ループを使って複数ページを巡回:
    • 複数のページを巡回して、データを収集します。

例: https://books.toscrape.com/ のすべてのページから書籍のデータを収集

以下のコードを使用して、複数ページにわたる書籍のデータを収集します。

ポイント

  1. base_url: 各ページのURLの共通部分を定義します。{}はページ番号が挿入される部分です。
  2. page_number: 最初に1ページ目から始めます。
  3. while True: すべてのページを巡回するための無限ループです。
  4. url = base_url.format(page_number): 現在のページ番号をURLに挿入して、各ページのURLを生成します。
  5. soup.find_all('article', class_='product_pod'): 現在のページのすべての書籍を取得します。
  6. if not data_items:: データが見つからない場合、ループを終了します。
  7. page_number += 1: 次のページに進みます。

出力

出力結果が長くて、少し終わるのか不安になりましたが、無事に終わってくれました😊

次は出力したデータの保存をやっていきます。

ステップ7: データの保存

目標

収集したデータをCSVファイルに保存する方法を学びます。

手順

  1. データを収集:
    • これまで学んだ手法でデータを収集します。
  2. CSVファイルにデータを保存:
    • Pythonのcsvモジュールを使って、収集したデータをCSVファイルに書き込みます。

例: 書籍データをCSVファイルに保存

以下のコードは、https://books.toscrape.com/ から収集した書籍のタイトルと価格をCSVファイルに保存する例です。

ポイント

  1. csv_file = 'books.csv': 保存するCSVファイルの名前を指定します。
  2. csv.writer(file): CSVファイルにデータを書き込むためのライターオブジェクトを作成します。
  3. writer.writerow(['タイトル', '価格']): CSVファイルにヘッダー行を追加します。
  4. writer.writerow([title, price]): 収集したデータ(タイトルと価格)をCSVファイルに書き込みます。
  5. with open(csv_file, 'w', newline='', encoding='utf-8') as file:: CSVファイルを開き、書き込みモードでデータを保存します。

出力

実際に出力されたデータ画像

このように、出力されたデータを整理してCSV化することで分析等に活用できるデータとなってきます。
実際にスクレイピングを行ってみて、わかったことはWEBから指定したデータを収集できることは凄く強力なスキルなんだなと感じました。

ステップ8: データのフィルタリングと分析

目標

保存されたCSVファイルからデータを読み込み、特定の条件に基づいてデータをフィルタリングし、簡単な分析を行います。

手順

  1. CSVファイルからデータを読み込む:
    • Pythonのcsvモジュールを使って、保存されたデータをCSVファイルから読み込みます。
  2. データのフィルタリング:
    • 価格が特定の値以上の書籍のみを抽出します。
  3. データの分析:
    • フィルタリングした書籍の平均価格を計算したり、特定の条件に合致する書籍の数を集計します。

具体的なコード例

以下のコードでは、前のステップで保存したbooks.csvファイルからデータを読み込み、フィルタリングと分析を行います。

データの読み込みとフィルタリング

データの分析

ポイント

  1. CSVファイルからデータを読み込み:
    • csv.DictReader を使って、CSVファイルのデータを辞書形式で読み込みます。各行のデータはリストに追加され、titleprice をキーにして管理します。
  2. 価格でフィルタリング:
    • 価格が£20以上の書籍をフィルタリングします。価格は文字列から£記号を除去し、float型に変換してから比較します。
  3. 平均価格の計算:
    • フィルタリングされた書籍の平均価格を計算し、結果を表示します。
  4. 書籍の数を表示:
    • フィルタリングされた書籍の数を集計し、表示します。

出力

ここのように出力したファイルの読み込みとフィルタリング、分析まで行ってくれます。

まとめ

今回は実践的な取り組みとして、スクレイピングの練習サイトを活用し、実際にデータの取得を行ってみました。初めての試みでしたが、必要なデータのみを正確に抽出するプロセスを体験することで、スクレイピングの有用性やその奥深さに気づくことができました。特に、無駄な情報を除き、自分に必要なデータだけを効率的に収集できる点は、今後のデータ分析や活用において大きなメリットとなることを実感しています。

次のステップとしては、APIを活用したスクレイピングにも挑戦し、さらに高度なデータ取得技術を身につけたいと考えています。APIを利用することで、より多様なデータにアクセスできるだけでなく、リアルタイムの情報を取り込むことも可能になります。このような技術を身につけることで、データ収集の幅が一層広がり、さまざまなプロジェクトに応用できるようになるでしょう。

これからも、学んだ知識や技術を活かしながら、より深いデータ活用を目指していきたいと思います。

もしわからないことがあれば、このブログやXに質問等を投げていただければと思います。また、コミュニティもやっっているのでそちらから質問を投げていただいても大丈夫ですよ!!

Xのアカウントはこちら

ダダのアカウント

Discordコミュニティ

ハピッツカフェ

プログラミングを視覚的に理解したい方やプログラミングで絵を書いてみたい方はUdemyで講座も作っているのでこちらも参考にしてみてください

Udemy講座

Processing Python講座

ChatGPTでPythonの学習を始めてみたい方は以下の記事を参考にしてみてください

ChatGPTはプログラミングの学習はできても、人のつながりまでは作ってくれません。
プログラミングの学習だけではなく、人との繋がりを作ってくれるスクールもオススメです。
気になる方は無料相談からでも体験してみてください!!

テックアカデミー無料メンター相談

次回の記事はこちらから

-ChatGTP, スキルアップ, プログラミング学習
-, , , ,