爬蟲系列之【數據解析之bs4】《四》

目錄

前言

一、用法詳解

1.1 獲取標簽內容

1.2 獲取標簽屬性?

1.3 獲取標簽包裹的文本內容

1.4 獲取標簽列表

1.5 css 選擇器:select

二、實戰案例

完整代碼


前言

HTML數據解析

1、正則

2、xpath(居多)

3、css 選擇器(bs4)較少

安裝 bs4 模塊:

pip install beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple

一、用法詳解

示例? HTML 文檔

html_doc = """
<html><head><title>這是一個示例網頁</title></head><body><p class="title"><b>示例標題</b></p><p class="story">這是一個示例段落。<a href="https://example.com" class="link" id="link1"><span>I am lysir</span>零一先生</a><a href="https://example.org" class="link" id="link2">中國共產黨萬歲</a></p></body>
</html>
"""

第一步:創建 bs4 對象

soup = BeautifulSoup(html_doc,'html.parser')

參數1:要解析的數據源

參數2:解析器

1.1 獲取標簽內容

例:拿 p 標簽的內容

html_doc = """
<html><head><title>這是一個示例網頁</title></head><body><p class="title"><b>示例標題</b></p><p class="story">這是一個示例段落。<a href="https://example.com" class="link" id="link1"><span>I am lysir</span>零一先生</a><a href="https://example.org" class="link" id="link2">中國共產黨萬歲</a></p></body>
</html>
"""# 1,導包
from bs4 import BeautifulSoup
# 2,創建bs4對象
soup = BeautifulSoup(html_doc,'html.parser')
# 3,獲取標簽內容:p標簽
result = soup.p
# 拿到的是第一個P標簽的內容
print(result)


1.2 獲取標簽屬性?


html_doc = """
<html><head><title>這是一個示例網頁</title></head><body><p class="title"><b>示例標題</b></p><p class="story">這是一個示例段落。<a href="https://example.com" class="link" id="link1"><span>I am lysir</span>零一先生</a><a href="https://example.org" class="link" id="link2">中國共產黨萬歲</a></p></body>
</html>
"""# 1,導包
from bs4 import BeautifulSoup
# 2,創建bs4對象
soup = BeautifulSoup(html_doc,'html.parser')
# 3,先獲取 a 標簽的所有屬性(返回的是字典)
result = soup.a.attrs
print("a標簽的所有屬性:",result)
# 4,從字典數據中取出需要的屬性值
print("常規:",result['href'])   # https://example.com
# 5,簡寫
print("簡寫:",soup.a['href'])   # https://example.com
# 6,get方法
print("get方法:",soup.a.get('href'))  # https://example.com


1.3 獲取標簽包裹的文本內容


html_doc = """
<html><head><title>這是一個示例網頁</title></head><body><p class="title"><b>示例標題</b></p><p class="story">這是一個示例段落。<a href="https://example.com" class="link" id="link1"><span>I am lysir</span>零一先生</a><a href="https://example.org" class="link" id="link2">中國共產黨萬歲</a></p></body>
</html>
"""# 1,導包
from bs4 import BeautifulSoup
# 2,創建bs4對象
soup = BeautifulSoup(html_doc,'html.parser')
# 3,獲取標簽包裹的文本內容
# 3.1 可以拿到第一個a標簽的所有文本內容,包括子孫節點的:零一先生 和 I am lysir(子節點數據)
print("常規寫法:",soup.a.text)
# 3.2 get_text()效果一樣
print("get_text()方法:",soup.a.get_text())
# 3.3 string 會不一樣些
# 在只有一個子標簽的情況下可以正常返回,多一個都會返回None
# 就像這里,除非刪除<span>I am lysir</span> 或者 零一先生 其中一個才能正常輸出
print("string方法:",soup.a.string)  # None


1.4 獲取標簽列表


html_doc = """
<html><head><title>這是一個示例網頁</title></head><body><p class="title"><b>示例標題</b></p><p class="story">這是一個示例段落。<a href="https://example.com" class="link" id="link1"><span>I am lysir</span>零一先生</a><a href="https://example.org" class="link" id="link2">中國共產黨萬歲</a></p></body>
</html>
"""# 1,導包
from bs4 import BeautifulSoup
# 2,創建bs4對象
soup = BeautifulSoup(html_doc,'html.parser')
# 3,獲取標簽列表
print("常規寫法:",soup.find_all('a'))
# 4,加條件過濾
# class加 _ 是因為class是python中的關鍵字,id就不用
print("條件過濾:",soup.find_all('a',class_='link')) 


1.5 css 選擇器:select

# 號是id ?

. 號是class?


>? 表示子節點 ?

空格 表示后代(可以跳級)

+ 表示相鄰的兄弟節點 ?

~ 表示某個元素后的所有兄弟節點

例:找到第二個 a 節點


html_doc = """
<html><head><title>這是一個示例網頁</title></head><body><p class="title"><b>示例標題</b></p><p class="story">這是一個示例段落。<a href="https://example.com" class="link" id="link1"><span>I am lysir</span>零一先生</a><a href="https://example.org" class="link" id="link2">中國共產黨萬歲</a></p></body>
</html>
"""# 1,導包
from bs4 import BeautifulSoup
# 2,創建bs4對象
soup = BeautifulSoup(html_doc,'html.parser')
# 3,重點: css 選擇器  select
# 例:找到第二個 a 節點
result = soup.select('p.story>a')  # p標簽屬性class=story下的才是a標簽
print("a標簽列表:",result) # 返回的是符合條件的列表
# 4,取出第二個 a 標簽
two_a = result[1]
print("第二個a標簽:",two_a)# select_one  只拿符合條件的第一個


二、實戰案例

需求:爬取番組計劃每一條圖書字段的值

鏈接:https://bgm.tv/book/browser/?sort=rank

詳細分析:

分析得知,響應數據是 html 的數據,所以可以采用bs4解析


完整代碼

import requests# 1,目標url
url = 'https://bgm.tv/book/browser/?sort=rank'
# 2,身份偽裝
header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
}
# 3,發起請求獲取響應
response = requests.get(url=url,headers=header)# 4,修改編碼格式(在網頁去查看數據編碼格式)沒加這行代碼之前會發生亂碼現象
response.encoding="utf-8"
# 5,打印內容查看是否符合我們需要的響應數據
# print(response.text)
# 6,對html用bs4解析
from bs4 import BeautifulSoup# 創建 bs4 對象
soup = BeautifulSoup(response.text,'html.parser')
# 獲取 li 列表
li_list = soup.select('ul#browserItemList>li')  # select返回的是列表
# 打印一下列表長度
print(f"共有{len(li_list)}條數據")
# 取標題
for data in li_list:# data 就是每一條 li 標簽title = data.select('div>h3>a')print(title[0].text)


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

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

相關文章

Java-實現PDF合同模板填寫內容并導出PDF文件

可用于公司用戶合同導出pdf文件 效果圖 一、導入所需要jar包 <!--生成PDF--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><dependency&…

【人工智能】GPT-4 vs DeepSeek-R1:誰主導了2025年的AI技術競爭?

前言 2025年&#xff0c;人工智能技術將迎來更加激烈的競爭。隨著OpenAI的GPT-4和中國初創公司DeepSeek的DeepSeek-R1在全球范圍內嶄露頭角&#xff0c;AI技術的競爭格局開始發生變化。這篇文章將詳細對比這兩款AI模型&#xff0c;從技術背景、應用領域、性能、成本效益等多個方…

前端開發10大框架深度解析

摘要 在現代前端開發中&#xff0c;框架的選擇對項目的成功至關重要。本文旨在為開發者提供一份全面的前端框架指南&#xff0c;涵蓋 React、Vue.js、Angular、Svelte、Ember.js、Preact、Backbone.js、Next.js、Nuxt.js 和 Gatsby。我們將從 簡介、優缺點、適用場景 以及 實際…

【MySQL】索引(頁目錄、B+樹)

文章目錄 1. 引入索引2. MySQL與磁盤交互的基本單位3. 索引的理解3.1 頁目錄3.2 B樹 4. 聚簇索引、非聚簇索引5. 索引的操作5.1 索引的創建5.1.1 創建主鍵索引5.1.2 創建唯一索引5.1.3 普通索引的創建5.1.4 全文索引的創建 5.2 索引的查詢5.3 刪除索引 1. 引入索引 索引&#…

python-串口助手(OV7670圖傳)

代碼 主python文件 import serial import serial.tools.list_ports import time import tkinter as tk from tkinter import ttk import numpy as np from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import threadi…

筑牢網絡安全防線:守護您的數據安全

在數字化時代&#xff0c;數據安全已成為企業和個人不容忽視的重要議題。近日印尼國家數據中心遭黑客襲擊的事件&#xff0c;不僅擾亂了機場的移民檢查&#xff0c;還影響了眾多機構的服務運行。黑客利用惡意軟件對數據中心進行攻擊&#xff0c;索要巨額贖金&#xff0c;給印尼…

Vue 3 整合 WangEditor 富文本編輯器:從基礎到高級實踐

本文將詳細介紹如何在 Vue 3 項目中集成 WangEditor 富文本編輯器&#xff0c;實現圖文混排、自定義擴展等高階功能。 一、為什么選擇 WangEditor&#xff1f; 作為國內流行的開源富文本編輯器&#xff0c;WangEditor 具有以下優勢&#xff1a; 輕量高效&#xff1a;壓縮后僅…

FastGPT 引申:信息抽取到知識圖譜的銜接流程

文章目錄 信息抽取到知識圖譜的銜接流程步驟1&#xff1a;原始信息抽取結果步驟2&#xff1a;數據標準化處理&#xff08;Python示例&#xff09;步驟3&#xff1a;Cypher代碼動態生成&#xff08;Python驅動&#xff09; 關鍵銜接邏輯說明1. 唯一標識符生成規則2. 數據映射策略…

Webshell 入侵與防御全攻略

Webshell&#xff0c;是指攻擊者上傳到網站的遠程控制后門&#xff0c;允許黑客像管理員一樣遠程控制網站&#xff0c;執行惡意命令&#xff0c;甚至完全接管網站。本文將帶你深入了解 Webshell 的入侵方式以及相應的防御措施&#xff0c;幫助你加固自己的網站防線。 什么是 W…

NL2SQL-基于Dify+阿里通義千問大模型,實現自然語音自動生產SQL語句

本文基于Dify阿里通義千問大模型&#xff0c;實現自然語音自動生產SQL語句功能&#xff0c;話不多說直接上效果圖 我們可以試著問他幾個問題 查詢每個部門的員工數量SELECT d.dept_name, COUNT(e.emp_no) AS employee_count FROM employees e JOIN dept_emp de ON e.emp_no d…

雙鏈路提升網絡傳輸的可靠性擴展可用帶寬

為了提升網絡傳輸的可靠性或增加網絡可用帶寬&#xff0c; 通常使用雙鏈路冗余備份或者雙鏈路聚合的方式。 本文介紹幾種雙鏈路網絡通信的案例。 5GWiFi冗余傳輸 雙Socket綁定不同網絡接口&#xff1a;通過Android的ConnectivityManager綁定5G蜂窩網絡和WiFi的Socket連接&…

Ubuntu22.04安裝Ollama部署DeepSeek-R1:32B模型

一、環境準備 1.硬件要求 GPU: 至少 NVIDIA A30/A100 (顯存 ≥ 24GB)內存: ≥ 64GB RAM存儲: ≥ 100GB 可用空間 (模型文件約 60GB)2.軟件依賴 # 驗證NVIDIA驅動 nvidia-smi二、Ollama安裝 方法 1:install.sh安裝 運行一下安裝命令: curl -fsSL https://ollama.com/inst…

LeetCode 解題思路 10(Hot 100)

解題思路&#xff1a; 上邊&#xff1a; 從左到右遍歷頂行&#xff0c;完成后上邊界下移&#xff08;top&#xff09;。右邊&#xff1a; 從上到下遍歷右列&#xff0c;完成后右邊界左移&#xff08;right–&#xff09;。下邊&#xff1a; 從右到左遍歷底行&#xff0c;完成后…

Checkpoint 模型與Stable Diffusion XL(SDXL)模型的區別

Checkpoint 模型與 Stable Diffusion XL&#xff08;SDXL&#xff09;模型 在功能、架構和應用場景上有顯著區別&#xff0c;以下是主要差異的總結&#xff1a; 1. 基礎架構與定位 Checkpoint 模型 是基于 Stable Diffusion 官方基礎模型&#xff08;如 SD 1.4/1.5&#xff09;…

GCC RISCV 后端 -- C語言語法分析過程

在 GCC 編譯一個 C 源代碼時&#xff0c;先會通過宏處理&#xff0c;形成 一個叫轉譯單元&#xff08;translation_unit&#xff09;&#xff0c;接著進行語法分析&#xff0c;C 的語法分析入口是 static void c_parser_translation_unit(c_parser *parser); 接著就通過類似遞…

第十五屆藍橋杯Scratch12月stema選拔賽真題—消失的水母

消失的水母 編程實現&#xff1a; 消失的水母。&#xff08;角色、背景非源素材&#xff09; 具體要求&#xff1a; 1、每次點擊綠旗&#xff0c;水母說“請輸入 2&#xff5e;10 的整數”&#xff0c;同時在舞臺下方顯示輸入框&#xff0c;如圖所示; 完整題目可點擊下方鏈…

Redis設計與實現-數據結構

Redis數據結構 1、RedisObject對象2、簡單動態字符串2.1 SDS定義2.2 SDS與C語言的區別2.3 SDS的空間分配策略2.3.1 空間預分配2.3.2 惰性空間釋放 2.4 SDS的API 3、鏈表3.1 鏈表的定義3.2 鏈表的API 4、字典4.1 字典的定義4.2 哈希算法4.3 哈希表的擴縮4.3.1 哈希表擴縮的判斷依…

由麻省理工學院計算機科學與人工智能實驗室等機構創建低成本、高效率的物理驅動數據生成框架,助力接觸豐富的機器人操作任務

2025-02-28&#xff0c;由麻省理工學院計算機科學與人工智能實驗室&#xff08;CSAIL&#xff09;和機器人與人工智能研究所的研究團隊創建了一種低成本的數據生成框架&#xff0c;通過結合物理模擬、人類演示和基于模型的規劃&#xff0c;高效生成大規模、高質量的接觸豐富型機…

RK3588開發筆記-fiq_debugger: cpu 0 not responding, reverting to cpu 3問題解決

目錄 前言 一、FIQ Debugger介紹 二、rockchip平臺配置方法 三、問題分析定位 IRQF_NOBALANCING 的含義 總結 前言 在進行 RK3588 開發的過程中,我們可能會遇到各種棘手的問題。其中,“fiq_debugger: cpu 0 not responding, reverting to cpu 3” 這個錯誤出現在RK3588的…

計算機視覺|ViT詳解:打破視覺與語言界限

一、ViT 的誕生背景 在計算機視覺領域的發展中&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;一直占據重要地位。自 2012 年 AlexNet 在 ImageNet 大賽中取得優異成績后&#xff0c;CNN 在圖像分類任務中顯示出強大能力。隨后&#xff0c;VGG、ResNet 等深度網絡架構不…