ホームページ バックエンド開発 Python チュートリアル Python と BeautifulSoup を使用して Goodreads からデータをスクレイピングする方法

Python と BeautifulSoup を使用して Goodreads からデータをスクレイピングする方法

Dec 10, 2024 am 10:40 AM

Web スクレイピング は、Web サイトからデータを収集するための強力なツールです。製品レビューの収集、価格の追跡、あるいは私たちの場合は Goodreads 書籍のスクレイピングなど、Web スクレイピングはデータ駆動型アプリケーションに無限の機会を提供します。

このブログ投稿では、Web スクレイピングの基礎、Python BeautifulSoup ライブラリの能力を探り、Goodreads Choice Awards データをスクレイピングするために設計された Python スクリプトを詳しく説明します。最後に、さらなる分析や応用のためにこのデータを CSV ファイルに保存する方法について説明します。


Goodreads とは何ですか?

Goodreads は、読者と書籍の推奨のための世界最大のプラットフォームです。ユーザーは書評、著者詳細、人気ランキングにアクセスできます。 Goodreads は毎年、読者がフィクション、ファンタジー、ロマンスなどのさまざまなジャンルでお気に入りの本に投票する Goodreads Choice Awards を主催しています。このため、Goodreads は、話題の本や著者に関する洞察を収集するための Web スクレイピングの理想的なターゲットになります。


Webスクレイピングとは何ですか?

Web スクレイピングには、自動化された方法で Web サイトからデータを抽出することが含まれます。これにより、次のようなタスクの情報を収集して構造化できます。

  • 傾向とパターンを分析します。
  • レビューや記事などのコンテンツを集約します。
  • 機械学習モデルまたはデータベースをフィードします。

環境のセットアップ

スクリプトに入る前に、必要なライブラリをインストールする必要があります。

  1. Python をインストールします

    システムに Python がインストールされていることを確認してください。

  2. 必要なライブラリをインストールします

    pip を使用して必要なライブラリをインストールします。

    pip install beautifulsoup4
    pip install requests
    
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    リクエスト: HTTP リクエストを URL に送信し、Web ページのコンテンツを取得できるようにします。

    BeautifulSoup: HTML の解析とデータ抽出を簡素化します。

これらのインストールが完了したら、スクレイピングの準備は完了です!


BeautifulSoup の紹介

BeautifulSoup は、HTML および XML ドキュメントを解析するための Python ライブラリです。これにより、開発者はページ構造をナビゲートし、コンテンツを抽出し、生の HTML を構造化フォーマットに変換できます。

BeautifulSoup の主要なメソッド

スクリプトで使用する重要なメソッドをいくつか示します:

  • BeautifulSoup(html, 'html.parser'): パーサーを初期化し、HTML コンテンツを操作できるようにします。
  • Soup.select(selector): クラスやタグなどの CSS セレクターを使用して要素を検索します。
  • Soup.find(class_='class_name'): 指定されたクラスを持つ要素が最初に出現する場所を見つけます。
  • Soup.find_parent(class_='class_name'): 現在の要素の親タグを検索します。
  • Soup.get('attribute'): href や src などの要素から属性の値を取得します。

メソッドの完全なリストについては、BeautifulSoup のドキュメントを参照してください。


スクリプトのセットアップ

必要なライブラリをインポートし、ブラウザを模倣するカスタム ヘッダーを定義することから始めましょう。これにより、Web サイトによるブロックを回避できます。

pip install beautifulsoup4
pip install requests
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

カテゴリと書籍のスクレイピング

まず、Goodreads’ Choice Awards ページとメイン アプリケーションの URL を定義します。 start_url にリクエストを送信し、Web ページのコンテンツを取得します。

from bs4 import BeautifulSoup as bs
import requests
import re
import csv

HEADERS = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64)...",
    "Accept-Language": "en-US, en;q=0.5",
}
ログイン後にコピー
ログイン後にコピー

各カテゴリには、ジャンルとそれぞれのページへのリンクが含まれています。 Soup.select を使用して、.category クラスの下にリストされているすべてのカテゴリを抽出します。

How to Scrape Data From Goodreads Using Python and BeautifulSoup

次に、各カテゴリを繰り返し処理して、ジャンル名とそのページ URL を取得します。

app_url = "https://www.goodreads.com"
start_url = "https://www.goodreads.com/choiceawards/best-books-2024"

res = requests.get(start_url, headers=HEADERS)
soup = bs(res.text, 'html.parser')

categories = soup.select('.category')
ログイン後にコピー
ログイン後にコピー

ここでは、さらなる処理のためにカテゴリ名 (ジャンル) とカテゴリ ページの URL を抽出します。

各 category_url に別のリクエストを送信し、そのカテゴリの下にあるすべての書籍を見つけます。

for index, category in enumerate(categories):
    genre = category.select('h4.category__copy')[0].text.strip()
    url = category.select('a')[0].get('href')
    category_url = f"{app_url}{url}"
ログイン後にコピー
ログイン後にコピー

category_books には、それぞれのカテゴリにあるすべての書籍のリストが含まれます。

書籍データの抽出

書籍のリストを取得したら、各書籍を反復処理してデータを抽出します。

投票を抽出

res = requests.get(category_url, headers=HEADERS)
soup = bs(res.text, 'html.parser')

category_books = soup.select('.resultShown a.pollAnswer__bookLink')
ログイン後にコピー
ログイン後にコピー

DOM を見ると、category 要素の親要素に投票数が存在します。したがって、find_parent メソッドを使用して要素を見つけて投票数を抽出する必要があります。

How to Scrape Data From Goodreads Using Python and BeautifulSoup

本のタイトル、著者、画像の URL を抽出

for book_index, book in enumerate(category_books):
    parent_tag = book.find_parent(class_='resultShown')
    votes = parent_tag.find(class_='result').text.strip()
    book_votes = clean_string(votes).split(" ")[0].replace(",", "")
ログイン後にコピー

各書籍の URL、表紙画像 URL、タイトル、著者が抽出されます。

clean_string 関数は、タイトルが適切にフォーマットされていることを保証します。スクリプトの先頭で定義できます

book_url = book.get('href')
book_url_formatted = f"{app_url}{book_url}"
book_img = book.find('img')
book_img_url = book_img.get('src')
book_img_alt = book_img.get('alt')
book_title = clean_string(book_img_alt)
print(book_title)
book_name = book_title.split('by')[0].strip()
book_author = book_title.split('by')[1].strip()
ログイン後にコピー

書籍の詳細をさらに抽出

評価、レビューなど、書籍に関する詳細を取得するには、別のリクエストを book_url_formatted に送信します。

def clean_string(string):
    cleaned = re.sub(r'\s+', ' ', string).strip()
    return cleaned
ログイン後にコピー

ここで get_rateds_reviews は、適切にフォーマットされた評価とレビューのテキストを返します。

How to Scrape Data From Goodreads Using Python and BeautifulSoup

この関数はスクリプトの先頭で定義できます。

pip install beautifulsoup4
pip install requests
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

各書籍の詳細ページに移動すると、評価、レビュー、詳細な説明などの追加情報が抽出されます。ここでは、本の説明要素が存在するかどうかもチェックし、存在しない場合はスクリプトが失敗しないようにデフォルトの説明を追加します。

from bs4 import BeautifulSoup as bs
import requests
import re
import csv

HEADERS = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64)...",
    "Accept-Language": "en-US, en;q=0.5",
}
ログイン後にコピー
ログイン後にコピー

ここでは、著者の詳細、出版情報、その他のメタデータも収集しています。

本の辞書を作成する

書籍から抽出したすべてのデータを辞書に保存しましょう。

app_url = "https://www.goodreads.com"
start_url = "https://www.goodreads.com/choiceawards/best-books-2024"

res = requests.get(start_url, headers=HEADERS)
soup = bs(res.text, 'html.parser')

categories = soup.select('.category')
ログイン後にコピー
ログイン後にコピー

この辞書を使用して、csv ファイルにデータを追加します。


データをCSVファイルに保存する

Python の標準ライブラリの一部である csv モジュールを使用します。したがって、別途インストールする必要はありません。

まず、これが最初のエントリかどうかを確認する必要があります。このチェックは、CSV ファイルの最初の行にヘッダーを追加するために必要です。

for index, category in enumerate(categories):
    genre = category.select('h4.category__copy')[0].text.strip()
    url = category.select('a')[0].get('href')
    category_url = f"{app_url}{url}"
ログイン後にコピー
ログイン後にコピー

ここでは、ヘッダー エントリを含む新しい CSV ファイルを作成する mode="w" を使用しています。

後続のすべてのエントリについて、データを CSV ファイルに追加します。

res = requests.get(category_url, headers=HEADERS)
soup = bs(res.text, 'html.parser')

category_books = soup.select('.resultShown a.pollAnswer__bookLink')
ログイン後にコピー
ログイン後にコピー

mode="a" はデータを CSV ファイルに追加します。

さあ、スクリプトの実行中、座ってリラックスして、コーヒー ☕️ を飲みながらお楽しみください。

完了すると、最終的なデータは次のようになります:

How to Scrape Data From Goodreads Using Python and BeautifulSoup

完全なソース コードは、この github リポジトリで見つけることができます。


まとめ

Python と BeautifulSoup を使用して Goodreads データをスクレイピングする方法を学びました。基本的なセットアップから CSV ファイルへのデータの保存に始まり、スクレイピング プロセスのあらゆる側面を調査しました。スクレイピングされたデータは次の用途に使用できます:

  • データの視覚化 (例: 最も人気のあるジャンルや著者)。
  • 書籍の人気を予測するための機械学習モデル。
  • 個人の書籍推奨システムを構築します。

Web スクレイピングは、クリエイティブなデータ分析とアプリケーションの可能性を広げます。 BeautifulSoup のようなライブラリを使用すると、複雑なスクレイピング タスクも管理可能になります。スクレイピング中は倫理慣行に従い、ウェブサイトの利用規約を尊重することを忘れないでください!

以上がPython と BeautifulSoup を使用して Goodreads からデータをスクレイピングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. C:比較されたアプリケーションとユースケース Python vs. C:比較されたアプリケーションとユースケース Apr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ 2時間のPython計画:現実的なアプローチ Apr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:ゲーム、GUIなど Python:ゲーム、GUIなど Apr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

2時間でどのくらいのPythonを学ぶことができますか? 2時間でどのくらいのPythonを学ぶことができますか? Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

Python vs. C:曲線と使いやすさの学習 Python vs. C:曲線と使いやすさの学習 Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:主要なアプリケーションの調査 Python:主要なアプリケーションの調査 Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

See all articles