Python と BeautifulSoup を使用して Goodreads からデータをスクレイピングする方法
Web スクレイピング は、Web サイトからデータを収集するための強力なツールです。製品レビューの収集、価格の追跡、あるいは私たちの場合は Goodreads 書籍のスクレイピングなど、Web スクレイピングはデータ駆動型アプリケーションに無限の機会を提供します。
このブログ投稿では、Web スクレイピングの基礎、Python BeautifulSoup ライブラリの能力を探り、Goodreads Choice Awards データをスクレイピングするために設計された Python スクリプトを詳しく説明します。最後に、さらなる分析や応用のためにこのデータを CSV ファイルに保存する方法について説明します。
Goodreads とは何ですか?
Goodreads は、読者と書籍の推奨のための世界最大のプラットフォームです。ユーザーは書評、著者詳細、人気ランキングにアクセスできます。 Goodreads は毎年、読者がフィクション、ファンタジー、ロマンスなどのさまざまなジャンルでお気に入りの本に投票する Goodreads Choice Awards を主催しています。このため、Goodreads は、話題の本や著者に関する洞察を収集するための Web スクレイピングの理想的なターゲットになります。
Webスクレイピングとは何ですか?
Web スクレイピングには、自動化された方法で Web サイトからデータを抽出することが含まれます。これにより、次のようなタスクの情報を収集して構造化できます。
- 傾向とパターンを分析します。
- レビューや記事などのコンテンツを集約します。
- 機械学習モデルまたはデータベースをフィードします。
環境のセットアップ
スクリプトに入る前に、必要なライブラリをインストールする必要があります。
-
Python をインストールします
システムに Python がインストールされていることを確認してください。
-
必要なライブラリをインストールします
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 クラスの下にリストされているすべてのカテゴリを抽出します。
次に、各カテゴリを繰り返し処理して、ジャンル名とそのページ 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 メソッドを使用して要素を見つけて投票数を抽出する必要があります。
本のタイトル、著者、画像の 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 は、適切にフォーマットされた評価とレビューのテキストを返します。
この関数はスクリプトの先頭で定義できます。
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 ファイルに追加します。
さあ、スクリプトの実行中、座ってリラックスして、コーヒー ☕️ を飲みながらお楽しみください。
完了すると、最終的なデータは次のようになります:
完全なソース コードは、この github リポジトリで見つけることができます。
まとめ
Python と BeautifulSoup を使用して Goodreads データをスクレイピングする方法を学びました。基本的なセットアップから CSV ファイルへのデータの保存に始まり、スクレイピング プロセスのあらゆる側面を調査しました。スクレイピングされたデータは次の用途に使用できます:
- データの視覚化 (例: 最も人気のあるジャンルや著者)。
- 書籍の人気を予測するための機械学習モデル。
- 個人の書籍推奨システムを構築します。
Web スクレイピングは、クリエイティブなデータ分析とアプリケーションの可能性を広げます。 BeautifulSoup のようなライブラリを使用すると、複雑なスクレイピング タスクも管理可能になります。スクレイピング中は倫理慣行に従い、ウェブサイトの利用規約を尊重することを忘れないでください!
以上がPython と BeautifulSoup を使用して Goodreads からデータをスクレイピングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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