国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) Python教學(xué) 如何使用 Python 和 BeautifulSoup 從 Goodreads 中抓取數(shù)據(jù)

如何使用 Python 和 BeautifulSoup 從 Goodreads 中抓取數(shù)據(jù)

Dec 10, 2024 am 10:40 AM

網(wǎng)頁抓取是從網(wǎng)站收集資料的強(qiáng)大工具。無論您是收集產(chǎn)品評論、追蹤價格,還是在我們的例子中抓取 Goodreads 書籍,網(wǎng)頁抓取都為資料驅(qū)動應(yīng)用程式提供了無限的機(jī)會。

在這篇文章中,我們將探討網(wǎng)頁抓取的基礎(chǔ)知識、Python BeautifulSoup 函式庫的強(qiáng)大功能,並分解旨在抓取 Goodreads Choice Awards 資料的 Python 腳本。最後,我們將討論如何將這些資料儲存在 CSV 檔案中以供進(jìn)一步分析或應(yīng)用。


Goodreads 是什麼?

Goodreads 是全球最大的讀者和書籍推薦平臺。它為用戶提供了書評、作者詳細(xì)資訊和熱門排名的訪問權(quán)限。每年,Goodreads 都會舉辦 Goodreads 選擇獎,讀者會投票選出他們最喜歡的各種類型的書籍,如小說、奇幻、浪漫等。這使得 Goodreads 成為網(wǎng)頁抓取的理想目標(biāo),以收集有關(guān)熱門書籍和作者的見解。


什麼是網(wǎng)頁抓取?

網(wǎng)頁抓取涉及以自動方式從網(wǎng)站提取資料。它允許您收集和建立任務(wù)的信息,例如:

  • 分析趨勢與模式。
  • 聚合評論或文章等內(nèi)容。
  • 提供機(jī)器學(xué)習(xí)模型或資料庫。

設(shè)定您的環(huán)境

在深入了解腳本之前,您需要安裝必要的程式庫。

  1. 安裝Python

    確保您的系統(tǒng)上安裝了 Python。

  2. 安裝所需的庫

    使用 pip 安裝所需的函式庫:

    pip install beautifulsoup4
    pip install requests
    

    請求:允許我們向 URL 發(fā)送 HTTP 請求並檢索網(wǎng)頁內(nèi)容。

    BeautifulSoup:簡化 HTML 解析和資料擷取。

這些安裝完成後,您就可以開始抓取了!


美麗湯簡介

BeautifulSoup 是一個用於解析 HTML 和 XML 文件的 Python 函式庫。它使開發(fā)人員能夠?qū)Ш巾撁娼Y(jié)構(gòu)、提取內(nèi)容並將原始 HTML 轉(zhuǎn)換為結(jié)構(gòu)化格式。

BeautifulSoup 中的關(guān)鍵方法

以下是我們將在腳本中使用的一些基本方法:

  • BeautifulSoup(html, 'html.parser'):初始化解析器並允許您處理 HTML 內(nèi)容。
  • soup.select(selector):使用 CSS 選擇器尋找元素,例如類別或標(biāo)籤。
  • soup.find(class_='class_name'):定位具有指定類別的元素的第一次出現(xiàn)。
  • soup.find_parent(class_='class_name'):尋找目前元素的父標(biāo)籤。
  • soup.get('attribute'):從元素中檢索屬性的值,例如 href 或 src。

有關(guān)方法的完整列表,請查看 BeautifulSoup 文件。


設(shè)定腳本

讓我們先匯入必要的函式庫並定義自訂標(biāo)頭來模擬瀏覽器。這有助於避免被網(wǎng)站封鎖。

pip install beautifulsoup4
pip install requests

抓取類別和書籍

我們先定義 Goodreads 選擇獎項頁面和主應(yīng)用程式的 URL。我們將向 start_url 發(fā)送請求並取得網(wǎng)頁內(nèi)容。

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",
}

每個類別都包含一個流派和指向其各自頁面的連結(jié)。使用 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 以進(jìn)行進(jìn)一步處理。

我們將向每個category_url發(fā)送另一個請求並找到該類別下的所有書籍。

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 將包含相應(yīng)類別下所有書籍的清單。

提取圖書數(shù)據(jù)

一旦我們有了書籍列表,我們將迭代每本書並提取數(shù)據(jù)。

提取投票

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

category_books = soup.select('.resultShown a.pollAnswer__bookLink')

如果我們在 DOM 中看到,投票計數(shù)存在於類別元素的父元素中。所以我們需要使用find_parent方法來定位元素並提取投票數(shù)。

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、標(biāo)題和作者。

clean_string 函數(shù)確保標(biāo)題格式整齊。您可以在腳本頂部定義它

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()

擷取更多書籍詳細(xì)資料

要獲取有關(guān)該書的更多詳細(xì)信息,例如評分、評論等,我們將向 book_url_formatted 發(fā)送另一個請求。

def clean_string(string):
    cleaned = re.sub(r'\s+', ' ', string).strip()
    return cleaned

此處 get_ ratings_reviews 傳回格式正確的評分和評論文字。

How to Scrape Data From Goodreads Using Python and BeautifulSoup

您可以在腳本頂部定義此函數(shù)。

pip install beautifulsoup4
pip install requests

透過導(dǎo)航到每本書的詳細(xì)資訊頁面,可以提取評分、評論和詳細(xì)描述等附加資訊。在這裡,我們還檢查書籍描述元素是否存在,否則放置預(yù)設(shè)描述,以便腳本不會失敗。

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",
}

在這裡,我們也收集了作者詳細(xì)資料、出版資訊和其他元資料。

建立圖書字典

讓我們將為一本書提取的所有資料儲存在字典中。

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 檔案中

我們將使用 csv 模組,它是 Python 標(biāo)準(zhǔn)函式庫的一部分。所以不需要單獨安裝。

首先我們需要檢查這是否是第一個條目。需要進(jìn)行此檢查才能將標(biāo)題新增至 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}"

我們使用 mode="w" 它將建立一個帶有標(biāo)題條目的新 csv 檔案。

現(xiàn)在,對於所有後續(xù)條目,我們會將資料附加到 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 檔案。

現(xiàn)在,坐下來,放鬆一下,在腳本運行時享用一杯咖啡??。

完成後,最終數(shù)據(jù)將如下所示:

How to Scrape Data From Goodreads Using Python and BeautifulSoup

您可以在此 github 儲存庫中找到完整的原始程式碼。


概括

我們已經(jīng)學(xué)習(xí)如何使用 Python 和 BeautifulSoup 抓取 Goodreads 資料。從基本設(shè)定到將資料儲存在 CSV 檔案中,我們探索了抓取過程的各個方面。抓取的資料可用於:

  • 資料視覺化(例如,最受歡迎的流派或作者)。
  • 預(yù)測書籍受歡迎程度的機(jī)器學(xué)習(xí)模型。
  • 建立個人圖書推薦系統(tǒng)。

網(wǎng)頁抓取為創(chuàng)意資料分析和應(yīng)用開啟了可能性。有了 BeautifulSoup 這樣的函式庫,即使是複雜的抓取任務(wù)也變得容易管理。請記住在抓取時遵循道德規(guī)範(fàn)並尊重網(wǎng)站的服務(wù)條款!

以上是如何使用 Python 和 BeautifulSoup 從 Goodreads 中抓取數(shù)據(jù)的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍睿浮耙环N接口,多種實現(xiàn)”,允許統(tǒng)一處理不同類型的對象。 1.多態(tài)通過方法重寫實現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實現(xiàn)。 2.多態(tài)的實際用途包括簡化代碼結(jié)構(gòu)、增強(qiáng)可擴(kuò)展性,例如圖形繪製程序中統(tǒng)一調(diào)用draw()方法,或遊戲開發(fā)中處理不同角色的共同行為。 3.Python實現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫該方法,但不要求繼承同一父類,只要對象實現(xiàn)相同方法即可,這稱為“鴨子類型”。 4.注意事項包括保持方

我如何寫一個簡單的'你好,世界!” Python的程序? 我如何寫一個簡單的'你好,世界!” Python的程序? Jun 24, 2025 am 12:45 AM

"Hello,World!"程序是用Python編寫的最基礎(chǔ)示例,用於展示基本語法並驗證開發(fā)環(huán)境是否正確配置。 1.它通過一行代碼print("Hello,World!")實現(xiàn),運行後會在控制臺輸出指定文本;2.運行步驟包括安裝Python、使用文本編輯器編寫代碼、保存為.py文件、在終端執(zhí)行該文件;3.常見錯誤有遺漏括號或引號、誤用大寫Print、未保存為.py格式以及運行環(huán)境錯誤;4.可選工具包括本地文本編輯器 終端、在線編輯器(如replit.com)

Python中的算法是什麼?為什麼它們很重要? Python中的算法是什麼?為什麼它們很重要? Jun 24, 2025 am 12:43 AM

AlgorithmsinPythonareessentialforefficientproblem-solvinginprogramming.Theyarestep-by-stepproceduresusedtosolvetaskslikesorting,searching,anddatamanipulation.Commontypesincludesortingalgorithmslikequicksort,searchingalgorithmslikebinarysearch,andgrap

什麼是python的列表切片? 什麼是python的列表切片? Jun 29, 2025 am 02:15 AM

ListslicinginPythonextractsaportionofalistusingindices.1.Itusesthesyntaxlist[start:end:step],wherestartisinclusive,endisexclusive,andstepdefinestheinterval.2.Ifstartorendareomitted,Pythondefaultstothebeginningorendofthelist.3.Commonusesincludegetting

python`@classmethod'裝飾師解釋了 python`@classmethod'裝飾師解釋了 Jul 04, 2025 am 03:26 AM

類方法是Python中通過@classmethod裝飾器定義的方法,其第一個參數(shù)為類本身(cls),用於訪問或修改類狀態(tài)。它可通過類或?qū)嵗{(diào)用,影響的是整個類而非特定實例;例如在Person類中,show_count()方法統(tǒng)計創(chuàng)建的對像數(shù)量;定義類方法時需使用@classmethod裝飾器並將首參命名為cls,如change_var(new_value)方法可修改類變量;類方法與實例方法(self參數(shù))、靜態(tài)方法(無自動參數(shù))不同,適用於工廠方法、替代構(gòu)造函數(shù)及管理類變量等場景;常見用途包括從

Python函數(shù)參數(shù)和參數(shù) Python函數(shù)參數(shù)和參數(shù) Jul 04, 2025 am 03:26 AM

參數(shù)(parameters)是定義函數(shù)時的佔位符,而傳參(arguments)是調(diào)用時傳入的具體值。 1.位置參數(shù)需按順序傳遞,順序錯誤會導(dǎo)致結(jié)果錯誤;2.關(guān)鍵字參數(shù)通過參數(shù)名指定,可改變順序且提高可讀性;3.默認(rèn)參數(shù)值在定義時賦值,避免重複代碼,但應(yīng)避免使用可變對像作為默認(rèn)值;4.args和*kwargs可處理不定數(shù)量的參數(shù),適用於通用接口或裝飾器,但應(yīng)謹(jǐn)慎使用以保持可讀性。

如何使用CSV模塊在Python中使用CSV文件? 如何使用CSV模塊在Python中使用CSV文件? Jun 25, 2025 am 01:03 AM

Python的csv模塊提供了讀寫CSV文件的簡單方法。 1.讀取CSV文件時,可使用csv.reader()逐行讀取,並將每行數(shù)據(jù)作為字符串列表返回;若需通過列名訪問數(shù)據(jù),則可用csv.DictReader(),它將每行映射為字典。 2.寫入CSV文件時,使用csv.writer()並調(diào)用writerow()或writerows()方法寫入單行或多行數(shù)據(jù);若要寫入字典數(shù)據(jù),則使用csv.DictWriter(),需先定義列名並通過writeheader()寫入表頭。 3.處理邊緣情況時,模塊自動處理

解釋Python發(fā)電機(jī)和迭代器。 解釋Python發(fā)電機(jī)和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是實現(xiàn)__iter__()和__next__()方法的對象,生成器是簡化版的迭代器,通過yield關(guān)鍵字自動實現(xiàn)這些方法。 1.迭代器每次調(diào)用next()返回一個元素,無更多元素時拋出StopIteration異常。 2.生成器通過函數(shù)定義,使用yield按需生成數(shù)據(jù),節(jié)省內(nèi)存且支持無限序列。 3.處理已有集合時用迭代器,動態(tài)生成大數(shù)據(jù)或需惰性求值時用生成器,如讀取大文件時逐行加載。注意:列表等可迭代對像不是迭代器,迭代器到盡頭後需重新創(chuàng)建,生成器只能遍歷一次。

See all articles