爬虫系列之【数据解析之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.mzph.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 等深度网络架构不…