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

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

Susan Sarandon
リリース: 2024-12-10 10:40:18
オリジナル
253 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート