「BeautifulSoupを使ったWebスクレイピングのマスタリング」

「美しくてファッショナブルなウェブスクレイピングのマスタリング」

 

「コンピュータは私たちの心の自転車のようなものです」とスティーブ・ジョブズはかつて述べました。WebスクレイピングにChatGPTをガイドとして使用して、風景の美しい景色を漕ぎ回してみましょう。

ChatGPTは、他の優れた使い方と共に、Webスクレイピングの学習におけるガイドとパートナーとなることができます。そして、私たちは単にWebスクレイピングの学習について話しているのではなく、どのように学んでいるかを再考しているのです。

好奇心とコード、説明が結びつくセクションに備えましょう。さあ、始めましょう。

 

ChatGPTを使ったWebスクレイピングの学び方は?

 

ここでは、素晴らしい計画が必要です。Webスクレイピングは、雇用主の注目を集める新しいデータサイエンスプロジェクトを行うのに役立ち、夢の仕事を見つける手助けにもなりますし、スクレイプしたデータを販売することもできます。しかし、それらの前に、計画を立てる必要があります。私たちがどう話しているのか、見てみましょう。

 

まず何よりも、計画を立てましょう

 

アルバート・アインシュタインはかつて「もし私が1つの問題を解く時間が1時間あるとすれば、その問題について考える時間を55分使い、解決策について考える時間を5分使うでしょう」と言いました。この例では、私たちは彼の論理に従います。

Webスクレイピングを学ぶためには、まずどのコーディングライブラリを使用するかを定義する必要があります。たとえば、データサイエンスのためにPythonを学びたい場合、以下のようにセクションに分割する必要があります。

  • Webスクレイピング
  • データの探索と分析
  • データの可視化
  • 機械学習

このように、選択する前にWebスクレイピングをサブセクションに分けることができます。まだ時間はたくさんあります。以下はWebスクレイピングのライブラリです。

  • Requests
  • Scrapy
  • BeautifulSoup
  • Selenium

素晴らしいですね。BeautifulSoupを選んだとしましょう。優れた目次を用意することをお勧めします。目次はウェブで見つけた本から選んでも構いません。仮にあなたの目次の最初の2つのセクションが以下のようになるとしましょう。

タイトル: BeautifulSoupによるWebスクレイピングのマスタリング

目次

セクション1: Webスクレイピングの基礎

  • Webスクレイピングの紹介
  • PythonとBeautifulSoupのはじめ方
  • HTMLとDOMの構造の理解

セクション2: 環境の設定と基本的なテクニック

  • Webスクレイピング環境の設定
  • BeautifulSoupの基本的なテクニック

また、上記で言及されている電子書籍を調査しないでください。この例のために作成しました。

さあ、目次が出来ました。あなたの日々の学習スケジュールに従いましょう。今日はセクション1を学びたいとしましょう。以下が使用できるプロンプトです:

Pythonの先生として、以下のサブセクションについて、コーディングの例を使って説明してください。トーンは会話的であり、9年生レベルに適しており、私は完全な初心者として扱われると想定しています。各サブセクションの後に、概念を理解したか、質問があるかどうかを尋ねてください。セクション1: Webスクレイピングの基礎Webスクレイピングの紹介PythonとBeautifulSoupのはじめ方HTMLとDOMの構造の理解」と

 

 

こちらがChatGPTの出力の最初のセクションです。初心者向けに概念を説明し、コーディングの例を提供し、理解を確認するための質問をします。素晴らしいですね。残りの部分も見てみましょう。

  

すばらしい、今では少し理解できていますね。この例から分かるように、Webスクレイピングについて貴重な情報が提供されています。しかし、もっと高度なアプリケーションでどのように役立つかを探ってみましょう。

重要な注意:ChatGPTの応答には情報の正確さに注意してください。必ず後で提供された情報を検証してください。

前の例からわかるように、しっかりとした計画があれば、ChatGPTはWebスクレイピングのような概念の学習に非常に役立ちます。このセクションでは、デバッグやコードの改善など、ChatGPTのさらなる応用について探っていきます。

 

コードのデバッグ

 

デバッグはときに非常に難しく時間のかかる作業になることがあります。コードが正しく書かれていない場合、大量の時間を費やすことになるかもしれません。以下のコードを参考にしてください。

以下のコードでは、PythonでWebスクレイピングを学ぶ際によく使われる引用をウェブサイトからスクレイピングすることを目指しています。

import requestsfrom bs4 import BeautifulSoupdef scrape_quotes():    page = 1    while True:        # このURLはページ番号によって変わらないため、バグが発生します。        url = "https://quotes.toscrape.com/page/1/"        response = requests.get(url)        if response.ok:            soup = BeautifulSoup(response.text, 'html.parser')            quotes = soup.find_all('span', class_='text')            if quotes:                for quote in quotes:                    print(quote.text)            else:                # 'quotes'が空でないため、この条件は永遠に達成されません。                print("スクレイピングする引用はもうありません。")                break            # ページ変数はインクリメントされていますが、URLでは使用されていません。            page += 1        else:            print(f"ウェブページの取得に失敗しました、ステータスコード:{response.status_code}")            breakscrape_quotes()

 

コードのエラーを検出できますか?できない場合は問題ありません。専門家以外では、それを行える人はほとんどいません。

エラーは、ループが終了条件に到達しない典型的なケースでした。したがって、実行する前に注意して、手動で停止する準備をしてください。

このエラーは、ページ変数が増加したにもかかわらず、スクリプトが同じページをリクエストし続け、無限ループに陥ってしまったことを意味します。

ここでは、次のプロンプトを使用してコードのデバッグを行うだけです。

このコードをデバッグします。

すると、コードチャンクのデバッグが即座に実行され、最新のバージョンが提供されます。

import requestsfrom bs4 import BeautifulSoupdef scrape_quotes():    page = 1    while True:        url = f"https://quotes.toscrape.com/page/{page}/"  # URLがページ番号で更新されます。        response = requests.get(url)        if response.ok:            soup = BeautifulSoup(response.text, 'html.parser')            quotes = soup.find_all('span', class_='text')            if quotes:                for quote in quotes:                    print(quote.text)            else:                print("スクレイピングする引用はもうありません。")                break            page += 1  # ページ番号をインクリメント        else:            print(f"ウェブページの取得に失敗しました、ステータスコード:{response.status_code}")            breakscrape_quotes()

 

出力には、ウェブサイトから取得した全ての引用が含まれます。

 

コードの改善

 

上記のウェブサイトから引用をスクレイピングするとします。

以下にコードを示します。

import requestsfrom bs4 import BeautifulSoupimport timedef scrape_quotes_longer():    page = 1    all_quotes = []    while True:        try:            response = requests.get(f"https://quotes.toscrape.com/page/{page}/", timeout=5)            if not response.ok:                break            soup = BeautifulSoup(response.text, 'html.parser')            quotes = soup.find_all('span', class_='text')            for quote in quotes:                all_quotes.append(quote.text)            # 'next'ボタンの単純なチェック            next_btn = soup.select_one('li.next > a')            if not next_btn:                break            page += 1            time.sleep(2)  # リクエスト間に2秒待機        except requests.RequestException as e:            print(f"リクエストが失敗しました:{e}")            break    return all_quotesquotes = scrape_quotes_longer()for q in quotes:    print(q)

 

出力は以前と同じになります。すべての引用がありますが、例えば、コードに満足していない場合、コードを改善したいと考えるかもしれません。

次のプロンプトを使用できます。それはシンプルですが、強力です。

このコードを改善する。

 

さて、ChatGPTが提案する新しいコードを見てみましょう。

import requestsfrom bs4 import BeautifulSoupfrom requests.exceptions import RequestExceptionfrom time import sleepdef scrape_quotes_improved():    page = 1    all_quotes = []    headers = {'User-Agent': 'Mozilla/5.0'}        while True:        url = f"https://quotes.toscrape.com/page/{page}/"        try:            response = requests.get(url, headers=headers, timeout=5)            response.raise_for_status()  # HTTPリクエストが成功しなかった場合はHTTPErrorを発生させる                        soup = BeautifulSoup(response.text, 'html.parser')            quotes = [quote.text for quote in soup.find_all('span', class_='text')]            if not quotes:                break            all_quotes.extend(quotes)                        next_btn = soup.select_one('li.next > a')            if not next_btn:                break  # もうページがありません                        page += 1            sleep(1)  # より合理的な遅延        except RequestException as e:            print(f"リクエストが失敗しました: {e}")            break    return all_quotesquotes = scrape_quotes_improved()for q in quotes:    print(q)

 

出力は同じですが、ChatGPTが行った改善点は次の通りです。

  

見てわかるように、非常に強力です。

 

より高度な応用例

 

 

ここでは、ウェブスクレイピングの全体的なプロセスを自動化しようとすることができます。スクレイピングしたいWebページからHTMLファイルをダウンロードし、HTMLドキュメントをChatGPTの高度なデータ分析に送信することができます。

例を見てみましょう。こちらはIMDBのウェブサイトで、IMDBユーザーの評価に基づくトップ100の映画を表示していますが、ウェブページの最後で50をクリックして、そのウェブページからすべて100を表示することを忘れないでください。

その後、ウェブページ上で右クリックし、「名前をつけて保存」をクリックし、HTMLファイルを選択して、HTMLファイルをダウンロードします。ファイルが取得できたら、ChatGPTを開いて高度なデータ分析を選択します。

最初にダウンロードしたHTMLファイルを追加する時間です。ファイルを追加したら、以下のプロンプトを使用してください。

映画の名前、IMDbの評価を含むトップ100のIMDb映画を保存し、最初の5行を表示します。さらに、このデータフレームをCSVファイルとして保存し、私に送信します。

 

ただし、ウェブページの構造がやや複雑な場合、ChatGPTはウェブサイトの構造を完全に理解できないかもしれません。ここでは、新機能の画像送信を使用することをおすすめします。情報を収集したいウェブページのスクリーンショットを送信できます。

この機能を使用するには、ウェブページ上で右クリックして「検証」をクリックします。ここで、HTML要素を表示することができます。

このページのスクリーンショットをChatGPTに送信し、このウェブページの要素に関する詳細情報を問い合わせます。ChatGPTが必要とする情報を取得したら、以前の会話に戻り、これらの情報を再びChatGPTに送信します。そして、できあがりです!

 

 

最終的な考え

 

ChatGPTを通じてウェブスクレイピングを発見しました。計画、デバッグ、およびコードの改善は、AIとの対話によってだけでなく、生産的でありながらも啓蒙的でした。それは新しい気づきに私たちを導く、テクノロジーとの対話です。

ご存知のように、ウェブスクレイピングのようなデータサイエンスは実践を要求します。それは職人のようなものです。コードを作成し、修正し、再度コードを作成することが、地位を確立しようとする新進のデータサイエンティストのための真実の掟です。

実践的な経験に準備はいいですか? StrataScratchプラットフォーム はあなたのアリーナです。データプロジェクトに参加して、面接の質問を解いて、あなたの成長をサポートするコミュニティに参加しましょう。それでは、そこで会いましょう!

****[Nate Rosidi](https://twitter.com/StrataScratch)**** はデータサイエンティストであり、プロダクト戦略に従事しています。彼はまた、分析を教える非常勤教授であり、トップ企業からの実際の面接質問を用いてデータサイエンティストが面接に備えるのを支援するStrataScratchの創設者でもあります。彼とはTwitter: StrataScratchまたはLinkedInでつながってください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

「マーシャンの共同創設者であるイータン・ギンスバーグについてのインタビューシリーズ」

エタン・ギンズバーグは、マーシャンの共同創業者であり、すべてのプロンプトを最適なLLMに動的にルーティングするプラットフ...

人工知能

「シフトのCEOであるクリス・ナーゲル – インタビューシリーズ」

クリスはSiftの最高経営責任者です彼は、Ping Identityを含むベンチャー支援および公開SaaS企業のシニアリーダーシップポジシ...

人工知能

「ゲイリー・ヒュースティス、パワーハウスフォレンジクスのオーナー兼ディレクター- インタビューシリーズ」

ゲイリー・ヒュースティス氏は、パワーハウスフォレンジックスのオーナー兼ディレクターであり、ライセンスを持つ私立探偵、...

人工知能

ピーター・マッキー、Sonarの開発者担当責任者-インタビューシリーズ

ピーター・マッキーはSonarのDeveloper Relationsの責任者です Sonarは、悪いコードの1兆ドルの課題を解決するプラットフォー...

機械学習

「機械学習 vs AI vs ディープラーニング vs ニューラルネットワーク:違いは何ですか?」

テクノロジーの急速な進化は、ビジネスが効率化のために洗練されたアルゴリズムにますます頼ることで、私たちの日常生活を形...

データサイエンス

「Adam Ross Nelsonによる自信のあるデータサイエンスについて」

データサイエンスの中で新たな分野が現れ、研究内容が理解しにくい場合は、専門家や先駆者と話すのが最善です最近、私たちは...