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

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

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

Dec 10, 2024 am 10:40 AM

網(wǎng)絡(luò)抓取是從網(wǎng)站收集數(shù)據(jù)的強(qiáng)大工具。無論您是收集產(chǎn)品評(píng)論、跟蹤價(jià)格,還是在我們的例子中抓取 Goodreads 書籍,網(wǎng)絡(luò)抓取都為數(shù)據(jù)驅(qū)動(dòng)應(yīng)用程序提供了無限的機(jī)會(huì)。

在這篇博文中,我們將探討網(wǎng)頁抓取的基礎(chǔ)知識(shí)、Python BeautifulSoup 庫的強(qiáng)大功能,并分解旨在抓取 Goodreads Choice Awards 數(shù)據(jù)的 Python 腳本。最后,我們將討論如何將這些數(shù)據(jù)存儲(chǔ)在 CSV 文件中以供進(jìn)一步分析或應(yīng)用。


Goodreads 是什么?

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


什么是網(wǎng)頁抓???

網(wǎng)絡(luò)抓取涉及以自動(dòng)方式從網(wǎng)站提取數(shù)據(jù)。它允許您收集和構(gòu)建任務(wù)的信息,例如:

  • 分析趨勢(shì)和模式。
  • 聚合評(píng)論或文章等內(nèi)容。
  • 提供機(jī)器學(xué)習(xí)模型或數(shù)據(jù)庫。

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

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

  1. 安裝Python

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

  2. 安裝所需的庫

    使用 pip 安裝所需的庫:

    pip install beautifulsoup4
    pip install requests
    

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

    BeautifulSoup:簡(jiǎn)化 HTML 解析和數(shù)據(jù)提取。

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


美麗湯簡(jiǎn)介

BeautifulSoup 是一個(gè)用于解析 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'):查找當(dāng)前元素的父標(biāo)簽。
  • soup.get('attribute'):從元素中檢索屬性的值,例如 href 或 src。

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


設(shè)置腳本

讓我們首先導(dǎo)入必要的庫并定義自定義標(biāo)頭來模擬瀏覽器。這有助于避免被網(wǎng)站屏蔽。

pip install beautifulsoup4
pip install requests

抓取類別和書籍

我們首先定義 Goodreads 選擇獎(jiǎng)頁面和主應(yīng)用程序的 URL。我們將向 start_url 發(fā)送請(qǐng)求并獲取網(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",
}

每個(gè)類別都包含一個(gè)流派和指向其各自頁面的鏈接。使用 soup.select,我們提取 .category 類下列出的所有類別。

How to Scrape Data From Goodreads Using Python and BeautifulSoup

接下來,迭代每個(gè)類別以獲取流派名稱及其頁面 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)一步處理。

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

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

如果我們?cè)?DOM 中看到,投票計(jì)數(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ì)信息,例如評(píng)分、評(píng)論等,我們將向 book_url_formatted 發(fā)送另一個(gè)請(qǐng)求。

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

此處 get_ ratings_reviews 返回格式正確的評(píng)分和評(píng)論文本。

How to Scrape Data From Goodreads Using Python and BeautifulSoup

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

pip install beautifulsoup4
pip install requests

通過導(dǎo)航到每本書的詳細(xì)信息頁面,可以提取評(píng)級(jí)、評(píng)論和詳細(xì)描述等附加信息。在這里,我們還檢查書籍描述元素是否存在,否則放置默認(rèn)描述,以便腳本不會(huì)失敗。

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ì)信息、出版信息和其他元數(shù)據(jù)。

創(chuàng)建圖書詞典

讓我們將為一本書提取的所有數(shù)據(jù)存儲(chǔ)在字典中。

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

我們將使用此字典將數(shù)據(jù)添加到 csv 文件中。


將數(shù)據(jù)存儲(chǔ)在 CSV 文件中

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

首先我們需要檢查這是否是第一個(gè)條目。需要進(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" 它將創(chuàng)建一個(gè)帶有標(biāo)題條目的新 csv 文件。

現(xiàn)在,對(duì)于所有后續(xù)條目,我們會(huì)將數(shù)據(jù)附加到 CSV 文件中:

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

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

mode="a" 會(huì)將數(shù)據(jù)附加到 CSV 文件。

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

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

How to Scrape Data From Goodreads Using Python and BeautifulSoup

您可以在此 github 存儲(chǔ)庫中找到完整的源代碼。


概括

我們已經(jīng)學(xué)習(xí)了如何使用 Python 和 BeautifulSoup 抓取 Goodreads 數(shù)據(jù)。從基本設(shè)置到將數(shù)據(jù)存儲(chǔ)在 CSV 文件中,我們探索了抓取過程的各個(gè)方面。抓取的數(shù)據(jù)可用于:

  • 數(shù)據(jù)可視化(例如,最受歡迎的流派或作者)。
  • 預(yù)測(cè)書籍受歡迎程度的機(jī)器學(xué)習(xí)模型。
  • 構(gòu)建個(gè)人圖書推薦系統(tǒng)。

網(wǎng)絡(luò)抓取為創(chuàng)意數(shù)據(jù)分析和應(yīng)用開辟了可能性。有了 BeautifulSoup 這樣的庫,即使是復(fù)雜的抓取任務(wù)也變得易于管理。請(qǐng)記住在抓取時(shí)遵循道德規(guī)范并尊重網(wǎng)站的服務(wù)條款!

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

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版

神級(jí)代碼編輯軟件(SublimeText3)

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

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

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

"Hello,World!"程序是用Python編寫的最基礎(chǔ)示例,用于展示基本語法并驗(yàn)證開發(fā)環(huán)境是否正確配置。1.它通過一行代碼print("Hello,World!")實(shí)現(xiàn),運(yùn)行后會(huì)在控制臺(tái)輸出指定文本;2.運(yùn)行步驟包括安裝Python、使用文本編輯器編寫代碼、保存為.py文件、在終端執(zhí)行該文件;3.常見錯(cuò)誤有遺漏括號(hào)或引號(hào)、誤用大寫Print、未保存為.py格式以及運(yùn)行環(huán)境錯(cuò)誤;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裝飾器定義的方法,其第一個(gè)參數(shù)為類本身(cls),用于訪問或修改類狀態(tài)。它可通過類或?qū)嵗{(diào)用,影響的是整個(gè)類而非特定實(shí)例;例如在Person類中,show_count()方法統(tǒng)計(jì)創(chuàng)建的對(duì)象數(shù)量;定義類方法時(shí)需使用@classmethod裝飾器并將首參命名為cls,如change_var(new_value)方法可修改類變量;類方法與實(shí)例方法(self參數(shù))、靜態(tài)方法(無自動(dòng)參數(shù))不同,適用于工廠方法、替代構(gòu)造函數(shù)及管理類變量等場(chǎng)景;常見用途包括從

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

參數(shù)(parameters)是定義函數(shù)時(shí)的占位符,而傳參(arguments)是調(diào)用時(shí)傳入的具體值。1.位置參數(shù)需按順序傳遞,順序錯(cuò)誤會(huì)導(dǎo)致結(jié)果錯(cuò)誤;2.關(guān)鍵字參數(shù)通過參數(shù)名指定,可改變順序且提高可讀性;3.默認(rèn)參數(shù)值在定義時(shí)賦值,避免重復(fù)代碼,但應(yīng)避免使用可變對(duì)象作為默認(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文件的簡(jiǎn)單方法。1.讀取CSV文件時(shí),可使用csv.reader()逐行讀取,并將每行數(shù)據(jù)作為字符串列表返回;若需通過列名訪問數(shù)據(jù),則可用csv.DictReader(),它將每行映射為字典。2.寫入CSV文件時(shí),使用csv.writer()并調(diào)用writerow()或writerows()方法寫入單行或多行數(shù)據(jù);若要寫入字典數(shù)據(jù),則使用csv.DictWriter(),需先定義列名并通過writeheader()寫入表頭。3.處理邊緣情況時(shí),模塊自動(dòng)處理

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

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

See all articles