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

この記事では、Pythonライブラリである美しいスープを使用してHTMLを解析する方法について説明します。 find()、find_all()、select()、およびget_text()などの一般的な方法は、データ抽出、多様なHTML構造とエラーの処理、および代替案(SEL

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

Pythonオブジェクトのシリアル化と脱介入は、非自明のプログラムの重要な側面です。 Pythonファイルに何かを保存すると、構成ファイルを読み取る場合、またはHTTPリクエストに応答する場合、オブジェクトシリアル化と脱滑り化を行います。 ある意味では、シリアル化と脱派化は、世界で最も退屈なものです。これらすべての形式とプロトコルを気にするのは誰ですか? Pythonオブジェクトを維持またはストリーミングし、後で完全に取得したいと考えています。 これは、概念レベルで世界を見るのに最適な方法です。ただし、実用的なレベルでは、選択したシリアル化スキーム、形式、またはプロトコルは、プログラムの速度、セキュリティ、メンテナンスの自由、およびその他の側面を決定する場合があります。

Pythonの統計モジュールは、強力なデータ統計分析機能を提供して、生物統計やビジネス分析などのデータの全体的な特性を迅速に理解できるようにします。データポイントを1つずつ見る代わりに、平均や分散などの統計を見て、無視される可能性のある元のデータの傾向と機能を発見し、大きなデータセットをより簡単かつ効果的に比較してください。 このチュートリアルでは、平均を計算し、データセットの分散の程度を測定する方法を説明します。特に明記しない限り、このモジュールのすべての関数は、単に平均を合計するのではなく、平均()関数の計算をサポートします。 浮動小数点数も使用できます。 ランダムをインポートします インポート統計 fractiから

この記事では、深い学習のためにTensorflowとPytorchを比較しています。 関連する手順、データの準備、モデルの構築、トレーニング、評価、展開について詳しく説明しています。 特に計算グラップに関して、フレームワーク間の重要な違い

このチュートリアルは、単純なツリーナビゲーションを超えたDOM操作に焦点を当てた、美しいスープの以前の紹介に基づいています。 HTML構造を変更するための効率的な検索方法と技術を探ります。 1つの一般的なDOM検索方法はExです

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

この記事では、コマンドラインインターフェイス(CLI)の構築に関するPython開発者をガイドします。 Typer、Click、Argparseなどのライブラリを使用して、入力/出力の処理を強調し、CLIの使いやすさを改善するためのユーザーフレンドリーな設計パターンを促進することを詳述しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

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

ホットトピック



