ChatGTP プログラミング学習

【プログラミング】PythonとChatGPTで進化するAPIとスクレイピング技術

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

前回の記事では、Pythonを使ったスクレイピングの基本を学び、ウェブからのデータ取得の基礎を身につけました。しかし、現代のプログラミングにおいて、APIが提供されている場合には、APIを利用することで、より効率的で正確なデータ取得が可能です。

ただし、APIが提供されていない場合や、特定の動的コンテンツ(例:JavaScriptで生成されたデータ)を取得する必要がある場合には、スクレイピングが非常に有効です。

今回は、ChatGPTと共にAPI学習を進めつつ、必要に応じてJavaScriptで生成されたデータや、ログインが必要なサイトのデータを取得するスクレイピング技術に挑戦していきます。この技術を習得することで、APIとスクレイピングの両方を効果的に使い分け、さらに効率的で強力なデータ取得方法を身につけることができるでしょう。

今回の目標は、Javascriptで生成されたデータの取得、ログインが必要なサイトのデータの取得を目指していきます。

APIがあればAPIを使い、必要に応じてスクレイピングを補完的に利用するのが賢明です。

APIとスクレイピングの違い

APIの優位性

APIを使うと、データを効率的かつ信頼性高く取得できます。APIは公式に提供されているため、正確で一貫性のあるデータが手に入り、ページ全体を読み込む必要がないため処理が速くなります。また、法的なリスクも低く、データが構造化されているため扱いやすいです。APIが利用できる場合は、スクレイピングよりも優先して使うべきです。

スクレイピングの役割

一方で、APIがない場合や制限がある場合、またはJavaScriptで生成された動的コンテンツを取得する際には、スクレイピングが必要になります。スクレイピングは、APIが提供されていないデータや、ログインが必要なサイトからデータを取得する際に役立ちます。

事前準備(環境設定)

WebスクレイピングやAPI活用の分野では、JavaScriptによって動的に生成されるデータを取得する必要がますます高まっています。しかし、従来のスクレイピング手法ではこれらのデータにアクセスするのが難しい場合があります。Pythonの強力なツールを駆使すれば、この課題に対応することが可能です。本記事では、JavaScriptで動的に生成されるデータをPythonで効率的に取得するための環境設定について詳しく解説します。初めての方でも安心して進められるよう、必要なライブラリのインストールから具体的な設定手順までを丁寧に紹介します。

Webスクレイピングツールの選定

  • Selenium: JavaScriptで動的に生成されるページを処理するには、ブラウザ自動化ツールであるSeleniumを使用します。Seleniumは、ブラウザを自動で操作して、完全にレンダリングされたページのソースやデータを取得することができます。
  • Playwright: Seleniumの代わりに、より新しいPlaywrightを使うことも考えられます。これも同様にブラウザを操作して動的コンテンツを取得できます。
  • Requests-HTML: 簡単なケースでは、Requests-HTMLライブラリを使ってJavaScriptの実行後のHTMLを取得できます。

今回は、SeleniumとおまけではRequestsを使用していきます。

Seleniumのインストール手順

  1. コマンドプロンプトまたはターミナルを開く:
    • Windowsではコマンドプロンプト、MacやLinuxではターミナルを開きます。
  2. Seleniumのインストールコマンドを実行:

このコマンドを実行すると、Seleniumの最新バージョンがインストールされます。

PIPのインストールは、仮想環境内で行いましょう。

ポイント

Selenium4.6からは、Chromedriverやその他ドライバーの設定が必要ないようです

Selenium 4.6はドライバ、4.11ではブラウザすら準備してくれる←この記事を参考にさせていただきました。

今までのコードが

現在のコード

ダダ
ダダ

この一行で済むようになったので、めっちゃ簡単にデータの収集ができるようになりました。

Seleniumを使った動的コンテンツのスクレイピング(ChromeDriverパス指定不要版)

目標

最新バージョンのSeleniumを使用して、動的に生成されるウェブページのデータを取得する方法を学びます。このバージョンでは、ChromeDriverのパス指定が不要となっています。

使用したニュースサイト

Hacker News

URL:https://news.ycombinator.com/news

APIがある時は基本的にはAPIを使用しましょう
URL:https://github.com/HackerNews/API

JavaScriptで生成されたデータの取得の問題点

通常のスクレイピングでは、サーバーから返されるHTMLコードからデータを直接取得しますが、JavaScriptで動的に生成されるコンテンツは、そのままでは取得できません。このような場合には、以下のような方法があります。

  1. Seleniumを使用する:
    • Seleniumは、ブラウザを自動操作してJavaScriptで生成されたコンテンツを取得できるツールです。
  2. APIを活用する:
    • ウェブページがデータを取得する際に使用しているAPIを直接呼び出すことで、必要なデータを取得することができます。

具体例: Seleniumを使ってニュースサイトからタイトルを取得

  1. ChromeDriverのセットアップ:
    • 最新バージョンのSeleniumとChromeDriverを使用する場合、パスの指定は不要です。Seleniumは環境変数に登録されているChromeDriverを自動的に検出します。
  2. Seleniumスクリプトを作成:
    • 動的に生成されるコンテンツを含むウェブページにアクセスし、データを取得します。

ニュースサイトのタイトルを取得するスクリプト

ポイント

ChromeDriverのセットアップ:

  • webdriver.Chrome() を使用してChromeブラウザを起動します。パス指定が不要なため、コードがシンプルになります。

動的コンテンツを含むページにアクセス:

  • driver.get メソッドを使用して、指定したURLのウェブページにアクセスします。

ページの読み込みを待機:

  • time.sleep(5) を使用して、ページが完全に読み込まれるまで待機します。

データの取得:

  • driver.find_elements を使用して、特定のクラス名 title を持つ要素(この記事ではタイトル)を全て取得します。

データの表示:

  • 取得したタイトルをループで表示します。

ブラウザを閉じる:

  • driver.quit() でブラウザを閉じます。

出力

ログインが必要なサイトからデータを取得

Pythonでのログインとデータ取得注意点

学習する前に必ず読んでね

最近では多くのウェブサイトで2段階認証(二要素認証、2FA)が導入されており

これにより自動ログインやデータ取得が難しくなっています。

解決策

APIの活用(当サイト推奨)

  • もし対象のウェブサイトがAPIを提供している場合、APIを利用することで、2段階認証を迂回してデータを取得できることがあります。APIの利用は、通常のスクレイピングよりも安定しており、推奨される方法です。

セッション管理

  • ログインセッションを保持することで、2段階認証を一度だけ通過し、そのセッションを使ってデータを取得することが可能です。requests.Session を使用すると、セッションを持続させることができます。

セッション管理と認証

ログインが必要なウェブサイトにアクセスする場合、まずはユーザーとしてログインし、その後に保護されたコンテンツへアクセスします。これには、通常以下の手順が含まれます。

  1. ログインフォームに情報を送信:
    • ユーザー名やパスワードをログインフォームに送信し、認証を行います。
  2. セッションを維持:
    • サーバーから送られてくるセッションIDやクッキーを保持して、認証された状態を維持します。
  3. 保護されたページからデータを取得:
    • 認証済みの状態で、保護されたページにアクセスしてデータを取得します。

Pythonでのログインとデータ取得の例

以下は、Pythonのrequestsライブラリを使って、ログインが必要なサイトからデータを取得する例です。

ポイント

  1. requests.Session():
    • セッションを開始し、同じセッション内で複数のリクエストを送信できるようにします。これにより、クッキーやセッション情報が維持されます。
  2. ログインリクエストの送信:
    • ログインフォームのURLとログイン情報(ユーザー名とパスワード)を指定してPOSTリクエストを送信します。
  3. ログイン成功の確認:
    • サーバーからのレスポンスコードが200であれば、ログイン成功とみなします。
  4. 保護されたページへのアクセス:
    • ログイン後、保護されたページにアクセスし、データを取得します。
  5. データの取得と表示:
    • 取得したデータを表示します。これはHTMLコードやAPIレスポンスなどです。

まとめ

今回の記事では、APIとスクレイピングの違いやそれぞれの役割について学びました。APIを使うことで、効率的で信頼性の高いデータ取得が可能であり、APIが提供されている場合にはそれを優先して利用すべきです。しかし、APIがない場合や特定の動的コンテンツを取得する必要がある場合には、スクレイピングが有効な手段となります。

特に、JavaScriptで生成されたデータやログインが必要なサイトのデータを取得する際には、Seleniumやrequestsライブラリを活用したスクレイピング技術が重要です。今回紹介した方法を活用することで、APIとスクレイピングを効果的に使い分け、あらゆるシナリオでデータ取得の技術を最大限に発揮できるようになります。

今後も、さらに高度なデータ取得手法や実践的なプロジェクトに取り組んでいきますので、引き続きご期待ください。

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

Xのアカウントはこちら

ダダのアカウント

Discordコミュニティ

ハピッツカフェ

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

Udemy講座

Processing Python講座

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

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

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

-ChatGTP, プログラミング学習
-, , , , ,