BeautifulSoup4的使用

Beautiful Soup 主要是用来解析提取 HTML 和 XML 文件中的数据。

现在官网推荐使用 Beautiful Soup 4 ,已经被移植到了BS4中。

安装 Beautiful Soup: pip instal beautifulsoup4

使用格式:

实例化 Beautifulsoup 传入被 解析的 HTML 文档内容和解析器,得到一个对象。

from bs4 import Beautifulsoup

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

参数:
    -html_doc:被解析的html文档内容
    -html.parser:解析器

解析器:

解析器 使用方法 优势 劣势 Python标准库

Python的内置标准库执行速度适中文档容错能力强 Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差 lxml HTML 解析器

速度快文档容错能力强 需要安装C语言库 lxml XML 解析器

速度快唯一支持XML的解析器 需要安装C语言库 html5lib

最好的容错性以浏览器的方式解析文档生成HTML5格式的文档 速度慢不依赖外部扩展

遍历文档树就是直接通过标签名字选择,特点是选择速度快,但如果存在多个相同的标签则只能返回第一个。

用法:

from bs4 import Beautifulsoup

soup = Beautifulsoup(html_doc, 'html.parser')
对象 = soup.body.a        # 查找最开始第一个body标签下的第一个a标签

对象.name           # 获取标签的名字
对象.attrs          # 获取标签的所有属性
对象.get(属性名)     # 获取标签指定属性
对象.text           # 获取标签的文本内容(子子孙孙都拼接在一起的)
对象.get_text()     # 和上面一样
对象.string         # 当前标签下有文本才取出来,否则全是None
对象.strings        # 子子孙孙的内容都放大生成器中

搜索文档树是通过主要的两个方法 find()find_all() 去文档中查找指定标签。

五种过滤器

1、字符串:

from bs4 import Beautifulsoup
soup = Beautifulsoup(html_doc, 'html.parser')

soup.find_all('a')  # 查找所有的a标签

2、正则表达式

import re

soup.find_all(re.compile('^b'))     # 查找出所有以b开头的标签

3、列表

soup.find_all(['a', 'b'])   # 找到所有的a标签和b标签

4、True/False

soup.find_all(name=True)        # 匹配有name属性的标签

5、方法

如果没有合适的过滤器,就可以定义一个方法只接收一个元素参数,返回 True 表示匹配到并找到,否则 False

查找有类属性,没有id属性的标签
def fun(tag):
    return tag.has_attr('class') and not tag.has_attr('id')

soup.find_all(fun)

CSS选择器

使用方法和CSS选择器一样,用css选择器的格式去找标签

格式:

soup.select('css选择器')   # 返回列表

'''
#id
.class
#id a ——>匹配对应id下的所有a标签(子子孙孙)
#id>a ——>匹配对应id下的直接子节点,子标签
'''

Original: https://www.cnblogs.com/XiaoYang-sir/p/15173127.html
Author: Mr-Yang`
Title: BeautifulSoup4的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591844/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 最新漏洞:Spring Framework远程代码执行漏洞

    Spring Framework远程代码执行漏洞 发布时间 2022-03-31 漏洞等级 High CVE编号 CVE-2022-22965 影响范围:同时满足以下三个条件可确定…

    数据库 2023年6月6日
    0100
  • MySQL锁(乐观锁、悲观锁、多粒度锁)

    锁 并发事务可能会发生什么情况: [En] What may happen to concurrent transactions: 读-读事务并发:此时是没有问题的,读操作不会对记…

    数据库 2023年5月24日
    0107
  • macOS快捷键

    1. 最小化所有应用程序 command+option+h+m 2. 同应用窗口切换 command ~ 3. 截图 "全&a…

    数据库 2023年6月14日
    084
  • Ubuntu 服务器安装 MySQL 远程数据库

    在 Web 项目中,我们需要使用到远程数据库,开发阶段也需要连接并查看数据库的状况。腾讯云、阿里云等云平台提供了远程数据库,可直接使用;当然也可以自己在部署 Web 的服务器上安装…

    数据库 2023年6月14日
    0100
  • 分布式消息队列RocketMQ(一)安装与启动

    分布式消息队列RocketMQ 一、RocketMQ简介 RocketMQ(火箭MQ) 出自于阿里,后开源给apache成为apache的顶级开源项目之一,顶住了淘宝10年的 双1…

    数据库 2023年6月6日
    0104
  • Docker Bridge 网络原理

    Docker 的网络子系统是可插拔驱动式的,默认情况下存在或支持多种网络接口,如 bridge、host、overlay、macvlan 以及 none 类型的网络接口。 brid…

    数据库 2023年6月6日
    0117
  • 解读《Benchmarking Hybrid OLTP&OLAP Database Systems》| StoneDB学术分享会

    编者按: Benchmarking 作为一个衡量标尺,可从不同的维度来客观公正公平的评价相关产品,例如:对应数据测评而言,有 TPC-C、TPC-H,TP-DS 等等。现有的这些测…

    数据库 2023年6月11日
    0132
  • 2022-8-19 第六组 JDBC(2)

    PreparedStatement:执行sql的对象 1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题 1. &#x8F93…

    数据库 2023年6月14日
    0101
  • 建造者设计模式

    可以看到这个学生类的属性是非常多的,所以构造方法不是一般的长,如果我们现在直接通过new的方式去创建: 可以看到,我们光是填参数就麻烦,我们还得一个一个对应着去填,一不小心可能就把…

    数据库 2023年6月14日
    093
  • 绕过国内域名备案

    情景:现有域名jsw.top,云服务器1台均在阿里云下。域名jsw.top、www.jsw.top CNAME解析到阿里云OSS的记录值(阿里云OSS会要求备案,导致无法使用),而…

    数据库 2023年6月14日
    0102
  • 多线程

    public class 多线程 { static boolean flag = true; static class t1 implements Runnable{ @Overr…

    数据库 2023年6月16日
    0115
  • SQLZOO练习5–join(表的连接)

    game表: idmdatestadiumteam1team2 1001 8 June 2012 National Stadium, Warsaw POL GRE 1002 8 J…

    数据库 2023年6月16日
    0100
  • Rocksdb Compaction原理

    compaction主要包括两类:将内存中imutable 转储到磁盘上sst的过程称之为flush或者minor compaction;磁盘上的sst文件从低层向高层转储的过程称…

    数据库 2023年6月9日
    0108
  • 4、异常

    一、异常的体系结构: java.lang.Throwable |—–java.lang.Error:一般不编写针对性的代码进行处理。 |—&#8…

    数据库 2023年6月6日
    0105
  • GreatSQL 开源数据库 & NVIDIA InfiniBand存算分离池化方案:实现高性能分布式部署

    NVIDIA InfiniBand是一种被广泛使用的网络互联技术,基于IBTA(InfiniBand Trade Association)而定义的高带宽、低延时、低CPU占用率、大…

    数据库 2023年5月24日
    086
  • 为什么我选择MySQL Workbench・一

    一、官方 官方提供的工具必然有其优势。 MySQL Workbench有两个版本,社区版和商业版。社区版是免费的。 二、第一个选择 使用MySQL之前用的是SQL Server而微…

    数据库 2023年6月9日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球