(Python)爬蟲進階(Python爬蟲教程)(CSS選擇器)

源代碼:

#導入庫
import requests
from bs4 import BeautifulSoup
import pandas as pd#爬蟲函數
def scrape_books():#1.基本網址連接base_url = "http://books.toscrape.com"#2.獲取基本網址response=requests.get(base_url)#3.檢查是否正常訪問if response.status_code !=200:print("無法訪問網站")return#創建解析器對象soup = BeautifulSoup(response.text, 'html.parser')books=[]# 提取所有圖書信息for book in soup.select('article.product_pod'):title = book.h3.a['title']price = book.select_one('p.price_color').textrating = book.select_one('p.star-rating')['class'][1]link = base_url + '/' + book.h3.a['href']books.append({'書名': title,'價格': price,'評分': rating,'鏈接': link})# 轉換為DataFrame并保存為CSVdf = pd.DataFrame(books)df.to_csv('books.csv', index=False)print(f"成功爬取 {len(books)} 本圖書信息")if __name__ == "__main__":scrape_books()

代碼詳解:

BeautifulSoup CSS選擇器詳細解析

這段代碼使用BeautifulSoup的CSS選擇器功能提取網頁數據,讓我一步步詳細解釋:

1. CSS選擇器基礎

soup.select()?和?select_one()

  • select():返回所有匹配CSS選擇器的元素列表

  • select_one():返回第一個匹配CSS選擇器的元素

選擇器語法:

選擇器示例說明
標簽選擇器'div'所有div元素
類選擇器'.product'class="product"的元素
ID選擇器'#header'id="header"的元素
屬性選擇器'[href]'所有帶href屬性的元素
組合選擇器'div.product'div標簽且class="product"
后代選擇器'div p'div內部的所有p元素

2. 代碼逐行解析

循環獲取每本書

for book in soup.select('article.product_pod'):
  • soup.select('article.product_pod'):選擇所有<article>標簽且class包含product_pod的元素

  • 返回一個元素列表,每個元素代表一個圖書容器

提取書名

title = book.h3.a['title']
  • book.h3.a:從當前book元素中查找<h3>標簽內的<a>標簽

  • ['title']:獲取該<a>標簽的title屬性值

  • 相當于HTML:<h3><a title="書名">...</a></h3>

提取價格

price = book.select_one('p.price_color').text
  • select_one('p.price_color'):在當前book元素中查找第一個<p>標簽且class包含price_color

  • .text:獲取該元素的文本內容

  • 相當于HTML:<p class="price_color">£18.80</p>

提取評分

rating = book.select_one('p.star-rating')['class'][1]
  • select_one('p.star-rating'):查找第一個<p>標簽且class包含star-rating

  • ['class']:獲取該元素的所有class屬性值(返回列表)

  • [1]:取列表的第二個元素(因為第一個總是"star-rating")

  • 相當于HTML:<p class="star-rating Five">?→ 提取"Five"

提取鏈接

link = base_url + '/' + book.h3.a['href']
  • book.h3.a['href']:獲取<h3><a>標簽的href屬性值(相對路徑)

  • base_url + '/' + ...:拼接成完整URL

保存數據

books.append({'書名': title,'價格': price,'評分': rating,'鏈接': link
})
  • 將提取的數據組成字典,添加到books列表

轉換為CSV

df = pd.DataFrame(books)
df.to_csv('books.csv', index=False)
  • pd.DataFrame(books):將字典列表轉換為pandas DataFrame

  • to_csv():保存為CSV文件

  • index=False:不保存行索引

3. 對應HTML結構分析

假設目標網頁結構如下:

<article class="product_pod"><h3><a href="book1.html" title="Book Title 1">Book Title 1</a></h3><p class="price_color">£18.80</p><p class="star-rating Five">★★★★★</p>
</article><article class="product_pod"><h3><a href="book2.html" title="Book Title 2">Book Title 2</a></h3><p class="price_color">£22.50</p><p class="star-rating Four">★★★★☆</p>
</article>

Pandas 庫詳解:數據處理利器

import pandas as pd?是 Python 數據分析中最常用的導入語句之一。Pandas 是一個強大的數據處理庫,特別適合處理表格數據(如 CSV、Excel)和時間序列數據。

為什么需要 Pandas?

  1. 替代 Excel 操作:可以處理 Excel 無法處理的大數據量

  2. 數據清洗工具:輕松處理缺失值、異常值

  3. 數據轉換能力:快速進行數據重塑、合并、分組

  4. 時間序列支持:專業的日期時間處理功能

  5. 高效性能:底層使用 NumPy 實現,運算速度快

Pandas 核心數據結構

1. Series - 一維數據

類似于帶索引的數組

import pandas as pd# 創建 Series
data = [1, 3, 5, 7]
s = pd.Series(data, index=['a', 'b', 'c', 'd'])
print(s)
"""
a    1
b    3
c    5
d    7
dtype: int64
"""

2. DataFrame - 二維表格

Pandas 的核心數據結構,類似 Excel 表格

# 創建 DataFrame
data = {'姓名': ['張三', '李四', '王五'],'年齡': [25, 30, 28],'城市': ['北京', '上海', '廣州']
}
df = pd.DataFrame(data)
print(df)
"""姓名  年齡  城市
0  張三  25  北京
1  李四  30  上海
2  王五  28  廣州
"""

在爬蟲項目中的應用

在爬蟲代碼中,我們使用 Pandas 將爬取的數據保存為 CSV 文件:

# 創建圖書數據列表
books = [{'書名': 'Python基礎', '價格': 59.9, '評分': '5星'},{'書名': '數據分析實戰', '價格': 79.9, '評分': '4.5星'},{'書名': '機器學習入門', '價格': 89.9, '評分': '4.8星'}
]# 將列表轉換為DataFrame
df = pd.DataFrame(books)# 保存為CSV文件
df.to_csv('books.csv', index=False, encoding='utf-8-sig')

關鍵參數解析:

  • index=False:不保存行索引(0,1,2...)

  • encoding='utf-8-sig':確保中文正常顯示

  • 其他常用參數:

    • sep=',':分隔符(默認逗號)

    • header=True:包含列名(默認包含)

注:該代碼是本人自己所寫,可能不夠好,不夠簡便,歡迎大家指出我的不足之處。如果遇見看不懂的地方,可以在評論區打出來,進行討論,或者聯系我。上述內容全是我自己理解的,如果你有別的想法,或者認為我的理解不對,歡迎指出!!!如果可以,可以點一個免費的贊支持一下嗎?謝謝各位彥祖亦菲!!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95102.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第七節 自然語言處理與Bert

自然語言處理與BERT模型&#xff1a;從基礎到實踐入門 自然語言處理&#xff08;NLP&#xff09;的核心目標之一是讓計算機理解人類語言的語義和上下文。本文將從基礎的字詞表示出發&#xff0c;逐步解析傳統模型的局限性、Self-attention的突破性思想&#xff0c;以及BERT如何…

攻擊者瞄準加密技術的基礎:智能合約

雖然利用許多智能合約中的安全漏洞已經成為網絡攻擊者的長期目標&#xff0c;但越來越多的安全公司開始關注使用欺詐性或混淆的智能合約從加密貨幣賬戶中竊取資金的騙局。 根據網絡安全公司 SentinelOne 本周發布的分析報告&#xff0c;在最近一次引人注目的攻擊中&#xff0c…

基于開源AI大模型、AI智能名片與S2B2C商城小程序的零售智能化升級路徑研究

摘要&#xff1a;在零售業數字化轉型浪潮中&#xff0c;人工智能技術正從“輔助工具”向“核心生產力”演進。本文聚焦開源AI大模型、AI智能名片與S2B2C商城小程序的協同應用&#xff0c;提出“數據感知-關系重構-生態協同”的三維創新框架。通過分析智能傳感、動態畫像與供應鏈…

機器學習 樸素貝葉斯

目錄 一.什么是樸素貝葉斯 1.1 從 “概率” 到 “分類” 二.樸素貝葉斯的數學基礎&#xff1a;貝葉斯定理 2.1 貝葉斯定理公式 2.2 從貝葉斯定理到樸素貝葉斯分類 2.3 “樸素” 的關鍵&#xff1a;特征獨立性假設 三、樸素貝葉斯的三種常見類型 3.1 高斯樸素貝葉斯&…

A Logical Calculus of the Ideas Immanent in Nervous Activity(神經網絡早期的M-P模型)

哈嘍&#xff0c;各位朋友大家上午好&#xff01;今天我們要一起啃下這篇神經科學與邏輯學交叉領域的奠基之作——McCulloch和Pitts的《A Logical Calculus of the Ideas Immanent in Nervous Activity》。這篇論文篇幅不長&#xff0c;但每一個定理、每一個假設都像精密齒輪&a…

大語言模型提示工程與應用:提示工程-提升模型準確性與減少偏見的方法

語言模型可靠性優化 學習目標 在本課程中&#xff0c;我們將學習通過提示工程提升模型事實準確性、減少偏見的有效方法。 相關知識點 語言模型可靠性優化 學習內容 1 語言模型可靠性優化 1.1 事實準確性增強 LLM可能生成看似合理但實際虛構的內容。優化策略包括&#x…

遇到前端導出 Excel 文件出現亂碼或文件損壞的問題

1. 檢查后端返回的數據格式確認接口響應&#xff1a;確保后端返回的是二進制流&#xff08;如 ArrayBuffer&#xff09;或 Base64 編碼的 Excel 文件&#xff0c;而非 JSON 字符串。用瀏覽器開發者工具&#xff08;Network 標簽&#xff09;檢查接口響應類型&#xff1a;正確的…

2025年Cloudflare WAF防護機制深度剖析:5秒盾繞過完全指南

2025年Cloudflare WAF防護機制深度剖析&#xff1a;5秒盾繞過完全指南 技術概述 Cloudflare作為全球領先的CDN和網絡安全服務提供商&#xff0c;其WAF&#xff08;Web Application Firewall&#xff09;防護系統已經成為現代Web安全的標桿。特別是其標志性的"5秒盾"…

【Android調用相冊、拍照、錄像】等功能的封裝

關于調用Android項目 關于Android中調用相機拍照、錄像&#xff0c;調用相冊選圖等是比較繁瑣的&#xff0c;為了減少代碼冗余&#xff0c;肯定需要封裝成工具類&#xff0c;最終使用大概如下&#xff0c;大部分代碼使用Java編寫&#xff0c;因為需要照顧到不適用kotlin的伸手…

Git 分支管理:從新開發分支遷移為主分支的完整指南

問題背景 我在使用 Git 進行開發時&#xff0c;由于原有的主分支遭到了污染&#xff0c;不得已在多方嘗試之后&#xff0c;決定替換原有的主分支。創建一個新分支并完成了重要修改&#xff1a; 基于提交 0fcb6df0f5e8caa3d853bb1f43f23cfe6d269b18 創建了 new-development 分支…

nginx常見問題(四):端口無權限

當 Nginx 日志報錯 bind() to 80 failed (13: Permission denied) 時&#xff0c;這通常是由于權限不足導致 Nginx 無法綁定到 80 端口&#xff08;該端口為系統特權端口&#xff09;。以下是詳細的問題分析與解決方案&#xff1a;一、問題原因分析80 端口屬于 系統特權端口&am…

【線性代數】線性方程組與矩陣——(3)線性方程組解的結構

上一節&#xff1a;【線性代數】線性方程組與矩陣——&#xff08;2&#xff09;矩陣與線性方程組的解 總目錄&#xff1a;【線性代數】目錄 文章目錄9. 向量組的線性相關性與線性方程組解的結構9.1. 向量組及其線性組合9.2. 向量組的線性相關性9.3. 向量組的秩9.4. 線性方程組…

機器學習-----K-means算法介紹

一、為什么需要 K-Means&#xff1f;在監督學習中&#xff0c;我們總把數據寫成 (x, y)&#xff0c;讓模型學習 x → y 的映射。 但現實中很多數據根本沒有標簽 y&#xff0c;例如&#xff1a;啤酒&#xff1a;熱量、鈉含量、酒精度、價格用戶&#xff1a;訪問時長、點擊次數、…

Spring Security自動處理/login請求,后端控制層沒有 @PostMapping(“/login“) 這樣的 Controller 方法

一&#xff1a;前言 &#xff08;1&#xff09;Spring Security概念&#xff1a; Spring Security 是屬于 Spring 生態下一個功能強大且高度可定制的認證和授權框架&#xff0c;它不僅限于 Web 應用程序的安全性&#xff0c;也可以用于保護任何類型的應用程序。 &#xff08…

idea開發工具中git如何忽略編譯文件build、gradle的文件?

idea開發工具中&#xff1a; git顯示下面這個文件有變更&#xff1a; ~/Documents/wwwroot-dev/wlxl-backend/java/hyh-apis/hyh-apis-springboot/build/resources/main/mapping/AccountRealnameMapper.xml 我git的根路徑是&#xff1a; ~/Documents/wwwroot-dev/wlxl-backend/…

狀態機淺析

狀態機是處理狀態依賴型行為的高效工具&#xff0c;通過結構化建模狀態轉換&#xff0c;解決了傳統條件判斷的冗余和混亂問題。它在設備控制、流程管理、協議解析等場景中表現優異&#xff0c;核心優勢在于邏輯清晰、可擴展性強和易于調試。 一、介紹 1. 概念 狀態機&#x…

Windows 手動病毒排查指南:不依賴殺毒軟件的系統安全防護

Windows 手動病毒排查指南&#xff1a;不依賴殺毒軟件的系統安全防護 在數字時代&#xff0c;電腦病毒就像潛伏的"網絡幽靈"&#xff0c;從竊取隱私的木馬到消耗資源的蠕蟲&#xff0c;時刻威脅著系統安全。當殺毒軟件失效或遭遇新型威脅時&#xff0c;手動排查病毒便…

GPT-5 is here

GPT-5 is here https://openai.com/index/introducing-gpt-5/ — and it’s #1 across the board! #1 in Text, WebDev, and Vision Arena #1 in Hard Prompts, Coding, Math, Creativity, Long Queries, and more Tested under the codename “summit”, GPT-5 now holds the …

【華為機試】55. 跳躍游戲

文章目錄55. 跳躍游戲題目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解題思路一、問題本質與建模二、方法總覽與選擇三、貪心算法的正確性&#xff08;直觀解釋 循環不變式&#xff09;四、反向貪心&#xff1a;等價但有啟發的視角五、與動態規劃的對比與誤區…

RabbitMQ面試精講 Day 18:內存與磁盤優化配置

【RabbitMQ面試精講 Day 18】內存與磁盤優化配置 開篇&#xff1a;內存與磁盤優化的重要性 歡迎來到"RabbitMQ面試精講"系列的第18天&#xff01;今天我們將深入探討RabbitMQ的內存與磁盤優化配置&#xff0c;這是面試中經常被問及的高頻主題&#xff0c;也是生產環…