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

PythonListsareimplementedasdynamicarrays、notlinkedlists.1)they restorediguourmemoryblocks、それはパフォーマンスに影響を与えることに影響を与えます

pythonoffersfourmainmethodstoremoveelements fromalist:1)removesthefirstoccurrenceofavalue、2)pop(index(index(index)removes regvess returnsaspecifiedindex、3)delstatementremoveselementselementsbyindexorseLice、および4)clear()

toresolvea "許可denided" errors whenrunningascript、sofflowthesesteps:1)checkandadaddadaddadadaddaddadadadaddadaddadaddadaddaddaddaddaddadaddadaddaddaddaddadaddaddaddadadaddadaddadaddadadisionsisingmod xmyscript.shtomakeitexexutable.2)

ArraySarecrucialinpythonimageprocessing asheyenable efficientmanipulation analysisofimagedata.1)画像anverttonumpyArrays、with grayscaleimagesasas2darraysandcolorimagesas.

ArsareSareBetterElement-WiseOperationsduetof of ActassandoptimizedImplementations.1)ArrayshaveContigUousMoryFordiRectAccess.2)ListSareFlexibleButSlowerDueTopotentialDynamicresizizizizing.3)

Numpyの配列全体の数学的操作は、ベクトル化された操作を通じて効率的に実装できます。 1)追加(arr 2)などの簡単な演算子を使用して、配列で操作を実行します。 2)Numpyは、基礎となるC言語ライブラリを使用して、コンピューティング速度を向上させます。 3)乗算、分割、指数などの複雑な操作を実行できます。 4)放送操作に注意して、配列の形状が互換性があることを確認します。 5)np.sum()などのnumpy関数を使用すると、パフォーマンスが大幅に向上する可能性があります。

Pythonでは、要素をリストに挿入するための2つの主要な方法があります。1)挿入(インデックス、値)メソッドを使用して、指定されたインデックスに要素を挿入できますが、大きなリストの先頭に挿入することは非効率的です。 2)Append(Value)メソッドを使用して、リストの最後に要素を追加します。これは非常に効率的です。大規模なリストの場合、append()を使用するか、dequeまたはnumpy配列を使用してパフォーマンスを最適化することを検討することをお勧めします。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
