Python——BeautifulSoup库

news2024/10/3 0:22:28

下面例题基于同一个网页讲解,进入网页后右键查看页面源代码对应着看

文章目录

  • 前言
  • 一、BeautifulSoup库简介
    • 什么是BeautifulSoup库?
    • BeautifulSoup库解析器
    • 网页爬虫
    • 解析网页的基本方法
  • 二、BeautifulSoup库的安装
    • 安装测试
  • 三、BeautifulSoup库的基本元素
    • 获取标签
    • 输出标签和名称类型
    • 输出父亲标签的名称
    • 输出属性
    • 输出相关属性的类型
    • 输出非属性字符串的内容
      • 【正例(取到)】
      • 【反例(取不到)】
    • 获取a标签的名称、属性和非属性字符串
  • 四、BeautifulSoup库的内容获取
    • 下行遍历案例


前言

BeautifulSoup库算是小型爬虫的包

一、BeautifulSoup库简介

什么是BeautifulSoup库?

BeautifulSoup库==beautifulsoup4== bs4
使用方法
from bs4 import BeautifulSoup

BeautifulSoup主要的功能:从复杂的网页中解析和提取HTML或XML内容

基于海量的网站源码的分析工作

实现过程也非常简单

提高分析源码的效率

BeautifulSoup库解析器

解析器使用方法特点
标准库HTML解析器BeautifulSoup(demo,"html.parser")内置标准库,容错性能差
1xml HTML解析器BeautifulSoup(demo,"1xml")速度快,需要安装库
1xml XML解析器BeautifulSoup(demo,"["1xml","xml"]")支持XML解析器,需要安装库
html5libBeautifulSoup(demo,"html5lib")容错性好,速度慢,需要安装库

网页爬虫

网页爬虫的主要工作是抓取网页的HTML源码等内容,对其进行分析,然后提取相应的内容。

用普通的正则表达式进行匹配,对于内容简单的网页分析,则是可以实现的。

针对工作量较重,分析内容很繁杂的网站而言,利用正则表达式的re模块实现爬虫是非常烦琐的。

此时需要更为高效的分析工具。

解析网页的基本方法

解析HTML、XML

将复杂的文档转换为一个树形结构:标签树

标签树的另一种表现形式

把标签树转换成变量,用于标签树的各种处理
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

二、BeautifulSoup库的安装

找到安装的Anaconda Powershell Prompt (Anaconda)
在这里插入图片描述

查一下现在都有哪些环境:conda info --envs
在这里插入图片描述

输入自己的环境(我的是Python39):activate Python39
安装beautifulsoup库 pip install beautifulsoup4
如果没安装过会有进度条
我的已经安装过一次了,如下图所示:
在这里插入图片描述

安装测试

测试网站:http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
获取网页数据、看看是否输出页面源代码

import requests
from bs4 import BeautifulSoup
r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
#按照html形式做解析
soup = BeautifulSoup(demo,"html.parser")
print(soup) 
#如果最后一行换成了print(soup.prettify())
#那么程序结果会加一些换行、缩进,看起来更美观一些

在这里插入图片描述

三、BeautifulSoup库的基本元素

4种常见的基本元素
基本元素名称使用方法
Tag标签.tag
Name名称tag.name
Attributes属性tag.attrs
NavigableString非属性字符串tag.string
Comment注释,一种特殊类型

获取标签

【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
此处以<h4>标签为例
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
r=requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
h4 = soup.h4  #获取标签h4
print(h4)  #输出标签h4
print(h4.name)  #输出标签的name元素

在这里插入图片描述
【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
此处以<head>标签为例
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
r=requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
head = soup.head  #获取标签head
print(head)  #输出标签head
print(head.name)  #输出标签的name元素

在这里插入图片描述

输出标签和名称类型

【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html

import requests
from bs4 import BeautifulSoup
r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
h4 = soup.h4
print(type(h4))
print(type(h4.name))

在这里插入图片描述

输出父亲标签的名称

【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
h4 = soup.h4
print(h4.parent.name)

在这里插入图片描述

输出属性

【例】http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
h4 = soup.h4
attrs = soup.h4.attrs
print(attrs)
print(len(attrs))
print(attrs['class'])
print(attrs['style'])

在这里插入图片描述

输出相关属性的类型

import requests
from bs4 import BeautifulSoup
r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
h4 = soup.h4
attrs = soup.h4.attrs
print(type(attrs))
print(type(attrs['class']))

在这里插入图片描述

输出非属性字符串的内容

【正例(取到)】

http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
h4 = soup.h4
attrs = soup.h4.attrs
strings = soup.h5.string
print(strings)

在这里插入图片描述

【反例(取不到)】

http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
attrs = soup.h4.attrs
strings = soup.h4.string
print(strings)

在这里插入图片描述
非属性字符串存在多个时,无法进行判断,系统认为是NONE

获取a标签的名称、属性和非属性字符串

网站:http://emotion.bxbw-jyz.cn/Home/index/showPartData.html

import requests
from bs4 import BeautifulSoup
r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
tag_a = soup.a
attrs_a = soup.a.attrs
string_a = soup.a.string
print(tag_a)
print(attrs_a)
print(len(attrs_a))
print(attrs_a['href'])
print(attrs_a['type'])
print(attrs_a['class'])
print(attrs_a['style'])

在这里插入图片描述

四、BeautifulSoup库的内容获取

在这里插入图片描述

BeautifulSoup内容获取树形结构
在这里插入图片描述
上层是父节点 下层是子节点

BeautifulSoup内容获取上行遍历
向上遍历
在这里插入图片描述

BeautifulSoup内容获取下行遍历
向下遍历
在这里插入图片描述

BeautifulSoup内容获取平行遍历
亲兄弟之间的遍历<td>
在这里插入图片描述

下行遍历案例

contents
子节点的列表,将子节点存入列表

children
子节点的迭代类型,循环遍历子节点

descendants
子孙节点的迭代类型

【例】查看子节点的列表
网站:http://emotion.bxbw-jyz.cn/Home/index/showPartData.html

import requests
from bs4 import BeautifulSoup

r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
content = soup.tr.contents
print(content)

在这里插入图片描述

【例】如何利用head下行遍历,找到link标签的属性href ?
网站:http://emotion.bxbw-jyz.cn/Home/index/showPartData.html
在这里插入图片描述

import requests
from bs4 import BeautifulSoup

r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
content = soup.head.contents
attrs = content[9].attrs
link_href = attrs['href']
rel = attrs['rel']
print(content)
print(len(content))
print(link_href)
print(rel)

在这里插入图片描述

【例】查看源代码中有多少对tr子标签
网站:http://emotion.bxbw-jyz.cn/Home/index/showPartData.html

import requests
from bs4 import BeautifulSoup

r = requests.get("http://emotion.bxbw-jyz.cn/Home/index/showPartData.html")
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
content = soup.tr.contents
print(content)
print(len(content))
print(content[1])
print(type(content[1]))

在这里插入图片描述

# 五、基于BeautifulSoup库的遍历循环 # 六、基于BeautifulSoup库的数据解析案例 # 七、基于BeautifulSoup库的数据导出 --- # 总结 提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APS排产在线材线束行业的应用

经过数年的发展&#xff0c;我国线束行业从无到有、从小到大&#xff0c;已经具备了一定的规模&#xff0c;其生产的线束产品能够满足市场上绝大多数的需求。世界上&#xff0c;任何事物的发展都不可能一帆风顺&#xff0c;总是在矛盾中纠正自身不足&#xff0c;从而不断前进。…

关于CUDA+Torch+TorchVision+Python环境配置问题

背景知识 1、GPU的并行计算能力&#xff0c;在过去几年里恰当地满足了深度学习的需求。在训练强化学习模型时&#xff0c;为了提供更好地算力和训练时间&#xff0c;因此需要使用GPU。 2、CUDA&#xff1a;是Nvidia推出的只能用于自家GPU的并行计算框架。只有安装这个框架才能…

机器学习笔记之条件随机场(五)条件随机场需要解决的任务介绍

机器学习笔记之条件随机场——条件随机场需要解决的任务介绍引言回顾&#xff1a;条件随机场条件随机场要解决的任务引言 上一节介绍了条件随机场的建模对象——条件概率P(I∣O)\mathcal P(\mathcal I \mid \mathcal O)P(I∣O)参数形式和向量形式的表示。本节将针对条件随机场…

java多线程基础技术

1.1 进程与多线程 1、进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在 指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程…

Mysql 数据库开发简介与选择

文章目录 前言一、为什么要使用数据库 数据库的概念为什么要使用数据库二、程序员为什么要学习数据库三、数据库的选择 主流数据库简介使用MySQL的优势版本选择四、Windows 平台下安装与配置MySQL 启动MySQL 服务控制台登录MySQL命令五、Linux 平台下安装与配置MySQL总结前言 …

【附源码】计算机毕业设计JAVA宠物收养管理

【附源码】计算机毕业设计JAVA宠物收养管理 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybati…

go微服务框架Kratos简单使用总结

Kratos是B站开源的一款go的微服务框架&#xff0c;最近PS5上的 战神诸神黄昏比较火&#xff0c;主角就是奎托斯。这个框架的名字就取自他。 在进行框架选型时&#xff0c;对比了目前主流的很多go微服务框架&#xff0c;如Zero&#xff0c;最后对比之下&#xff0c;选择了Krato…

vector容器 (20221115)

一、vector容器 1、功能&#xff1a;与数组非常相似&#xff0c;也称为单端数组。 2、区别&#xff1a;数组是静态空间&#xff0c;vector可以动态扩展。 动态扩展&#xff1a;并不是在原空间之后续接新空间&#xff0c;而是找更大的内存空间&#xff0c;将原数据拷贝到新空…

Django框架的电商商城的设计与实现python语言

摘要 随着计算机技术&#xff0c;网络技术的迅猛发展&#xff0c;Internet 的不断普及&#xff0c;网络在各个领域里发挥了越来越重要的作用。特别是随着近年人民生活水平不断提高&#xff0c;电商商城给商家的业务带来了更大的发展机遇。 在经济快速发展的带动下&#xff0c;服…

网络读卡器开发,带你智能感知无线设备

随着物联网行业的快速发展&#xff0c;针对网络读卡器的技术要求也在不断地提升&#xff0c;为此出现一款体积小、低功耗、高度集成、性能稳定的非接触读卡器&#xff0c;用户不需要进行编程设计&#xff0c;只用发送简单命令&#xff0c;就能完成对卡片的读写。 网路读卡器是智…

通过DataEase行列权限设置实现数据权限管控

在企业的日常经营中&#xff0c;企业人数达到一定数量之后&#xff0c;就需要对企业的层级和部门进行细分&#xff0c;建立企业的树形组织架构。围绕着树形组织架构&#xff0c;企业能够将权限落实到个人&#xff0c;避免企业内部出现管理混乱等情况。而在涉及到数据分析等工作…

浮点数 C语言 IEEE754

知识内化&#xff1a;用自己的语言讲述一遍&#xff0c;把复杂的东西解释得简单透彻 计算机表示浮点数的问题&#xff1a;&#xff08;自己分析一下这个问题&#xff09; 输入是&#xff1a;任意一个浮点数&#xff0c;正无穷到负无穷&#xff0c;包括整数部分和小数部分 2222…

支持I2S数字音频接口;音频功放芯片NTP8835C

韩国耐福数字功放系列其NTP8835C芯片采用I2S数字输入接口&#xff0c; 可用于音频应用场合&#xff0c;例如蓝牙&#xff0f;WIFI音箱、音响设备&#xff0c;投影仪、高清电视、会议系统等。通过I2S传输数字音频信号&#xff0c; 能够还原和输出高保真高质量的音频信号。 NTP88…

阿里SQL又爆神作数据生态:MySQL复制技术与生产实践笔记

前言 在开源国产数据库崛起的今天&#xff0c;这本佳作《数据生态:MySQL复制技术与生产实践》&#xff0c;无疑将为MySQL在各行业的推广和使用做出贡献&#xff0c;这也是像我这样的从商业数据库转到开源数据库的从业者的福音。 MySQL能够成为“最流行的开源数据库”&#xf…

【数据结构】图—图的存储结构(邻接矩阵法、邻接表法、邻接多重法、十字链表法)

图的存储结构1 邻接矩阵法2 邻接表法3 十字链表法4邻接多重法1 邻接矩阵法 主要存储的是点&#xff0c;所以空间复杂度和点(v)有关 对象&#xff1a;稠密图、有向图、无向图 表示唯一、适合稠密图空间复杂度&#xff1a;O&#xff08;v^2&#xff09;无向图邻接矩阵一定是一个…

Docker环境安装OWT Server[Open WebRTC Toolkit]

Docker环境安装OWT Server[Open WebRTC Toolkit] 目录 Docker环境安装OWT ServerDocker自定义开发OWT Server wiki&#xff08;照着操作会有不注意的坑&#xff09;&#xff1a;An easy way to quickly evaluate OWT with Docker image 相关文章&#xff1a; Ubuntu环境安装OW…

Emlog评论区显示用户操作系统与浏览器信息教程

近期有不少初入Emlog的站长来咨询Emlog程序的评论区域如何实现获取到评价用户的操作系统和浏览器信息&#xff0c;其实要实现该功能也很简单&#xff0c;而且网上也有不少类是的插件。今天&#xff0c;冬镜就和大家聊聊不用插件来实现获取评论用户操作系统与浏览器信息。改造前…

软件测试 -- 进阶 3 软件测试设计

我并没有什么方法&#xff0c;只是对于一件事情很长时间很热心地去考虑罢了。-- 牛顿 1. 设计是什么&#xff1f; 设计是有目标、有计划的创造和创作活动&#xff0c;按特定需求制定解决方案。设计指把头脑中的设想/想法通过合理的规划、周密的计划、有效的方式表达出来的过程…

【C#】生成WebAPI实现简单调用本地数据库

需求&#xff1a;通过C#生成WebAPI&#xff0c;供微信小程序调用以访问本地数据库(微信小程序部分下次再说&#xff0c;今天先记录一下C#生成WebAPI相关的坑与注意点)。 数据库&#xff1a;SQL Server Web服务器&#xff1a;IIS 编程语言&#xff1a;C# IDE&#xff1a;VS20…

微信|零到一打造一款与微信互通的自动聊天机器人应用

本文干货充足篇幅较长&#xff0c;建议收藏后阅读避免迷路。文末可获取【自动聊天机器人源码和Demo】。 本教程教大家使用即构 ZIM SDK 创建一个能与微信端互动消息的自动聊天机器人应用。ZIM SDK可广泛应用于娱乐社交、电商购物、在线教育、互动直播等多种场景下即时通讯功能实…