網頁抓取是從網站收集資料的強大工具。無論您是收集產品評論、追蹤價格,還是在我們的例子中抓取 Goodreads 書籍,網頁抓取都為資料驅動應用程式提供了無限的機會。
在這篇文章中,我們將探討網頁抓取的基礎知識、Python BeautifulSoup 函式庫的強大功能,並分解旨在抓取 Goodreads Choice Awards 資料的 Python 腳本。最後,我們將討論如何將這些資料儲存在 CSV 檔案中以供進一步分析或應用。
Goodreads 是什麼?
Goodreads 是全球最大的讀者和書籍推薦平台。它為用戶提供了書評、作者詳細資訊和熱門排名的訪問權限。每年,Goodreads 都會舉辦 Goodreads 選擇獎,讀者會投票選出他們最喜歡的各種類型的書籍,如小說、奇幻、浪漫等。這使得 Goodreads 成為網頁抓取的理想目標,以收集有關熱門書籍和作者的見解。
什麼是網頁抓取?
網頁抓取涉及以自動方式從網站提取資料。它允許您收集和建立任務的信息,例如:
- 分析趨勢與模式。
- 聚合評論或文章等內容。
- 提供機器學習模型或資料庫。
設定您的環境
在深入了解腳本之前,您需要安裝必要的程式庫。
-
安裝Python
確保您的系統上安裝了 Python。
-
安裝所需的庫
使用 pip 安裝所需的函式庫:
pip install beautifulsoup4 pip install requests
請求:允許我們向 URL 發送 HTTP 請求並檢索網頁內容。
BeautifulSoup:簡化 HTML 解析和資料擷取。
這些安裝完成後,您就可以開始抓取了!
美麗湯簡介
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 文件。
設定腳本
讓我們先匯入必要的函式庫並定義自訂標頭來模擬瀏覽器。這有助於避免被網站封鎖。
pip install beautifulsoup4 pip install requests
抓取類別和書籍
我們先定義 Goodreads 選擇獎項頁面和主應用程式的 URL。我們將向 start_url 發送請求並取得網頁內容。
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 中看到,投票計數存在於類別元素的父元素中。所以我們需要使用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_ ratings_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 檔案中
我們將使用 csv 模組,它是 Python 標準函式庫的一部分。所以不需要單獨安裝。
首先我們需要檢查這是否是第一個條目。需要進行此檢查才能將標題新增至 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" 它將建立一個帶有標題條目的新 csv 檔案。
現在,對於所有後續條目,我們會將資料附加到 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 檔案中,我們探索了抓取過程的各個方面。抓取的資料可用於:
- 資料視覺化(例如,最受歡迎的流派或作者)。
- 預測書籍受歡迎程度的機器學習模型。
- 建立個人圖書推薦系統。
網頁抓取為創意資料分析和應用開啟了可能性。有了 BeautifulSoup 這樣的函式庫,即使是複雜的抓取任務也變得容易管理。請記住在抓取時遵循道德規範並尊重網站的服務條款!
以上是如何使用 Python 和 BeautifulSoup 從 Goodreads 中抓取數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

Python 對象的序列化和反序列化是任何非平凡程序的關鍵方面。如果您將某些內容保存到 Python 文件中,如果您讀取配置文件,或者如果您響應 HTTP 請求,您都會進行對象序列化和反序列化。 從某種意義上說,序列化和反序列化是世界上最無聊的事情。誰會在乎所有這些格式和協議?您想持久化或流式傳輸一些 Python 對象,並在以後完整地取回它們。 這是一種在概念層面上看待世界的好方法。但是,在實際層面上,您選擇的序列化方案、格式或協議可能會決定程序運行的速度、安全性、維護狀態的自由度以及與其他系

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

該教程建立在先前對美麗湯的介紹基礎上,重點是簡單的樹導航之外的DOM操縱。 我們將探索有效的搜索方法和技術,以修改HTML結構。 一種常見的DOM搜索方法是EX

本文指導Python開發人員構建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等庫詳細介紹,強調輸入/輸出處理,並促進用戶友好的設計模式,以提高CLI可用性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。