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)

大家都在看

  • apk生成多渠道的安装包

    一、前言->需求 最近公司的项目需要试上线,安卓包会放到多个渠道进行推广,玩家会进行下载安装登录,后台为了得到渠道包的下载使用数据,就会给每个渠道包加入了不同的渠道ID以便统…

    数据库 2023年6月14日
    0134
  • 日志:Redo Log 和 Undo Log

    本篇文章主要介绍 Redo Log 和 Undo Log: 利用 Redo Log 和 Undo Log 实现本地事务的原子性、持久性 Redo Log 的写回策略 Redo Lo…

    数据库 2023年6月11日
    0107
  • FTP文件上传

    一、配置FTP文件服务器 以Ubuntu为例 FTP两种模式简介 PORT(主动模式)第一步FTP客户端首先随机选择一个大于1024的端口p1,并通过此端口发送请求连接到FTP服务…

    数据库 2023年6月6日
    0111
  • day01-数据库的安装和使用

    Java数据库的安装和使用 1.数据库的作用 一个问题:淘宝网、京东、微信抖音,都有各自的功能,那么我们退出系统的时候,为什么信息还在? 解决之道-文件,数据库 为了解决上诉问题,…

    数据库 2023年6月11日
    0115
  • python爬虫—xpath基础教程

    XPath: XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找…

    数据库 2023年6月11日
    092
  • flowable 部署流程定义(从Classpath) 和 (根据ui.modeler的 modelId部署)

    /**部署流程定义(根据ui.modeler的 modelId部署) * @param modelId 模型ID * @from fhadmin.cn */ protected S…

    数据库 2023年6月6日
    0132
  • 基于Spring实现策略模式

    背景: 看过很多策略模式,总结下来实现原理大体都差不多,在这里主要是讲解下自己基于Spring更优雅的实现方案;这个方案主要是看了一些开源rpc和Spring相关源码后的一些思路,…

    数据库 2023年6月6日
    0113
  • Shell第一章《变量》

    什么是shell shell-‘壳’ 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程…

    数据库 2023年6月14日
    098
  • 在windows上用docker desktop安装StoneDB

    自6月底开源以来,许多热心的社区用户都对StoneDB进行了编译和测试,也有一些用户询问StoneDB是否会支持Windows。虽然适配Windows版本的StoneDB尚未进入研…

    数据库 2023年5月24日
    0122
  • Redis 使用的 10 个小技巧

    Redis 在当前的技术社区里是非常热门的。从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路。 随之而来的一系列最佳实践,使…

    数据库 2023年6月9日
    085
  • 记录一次docker镜像拉取失败的问题

    syslog日志 Mar 13 08:42:41 xxx dockerd[30691]: time=”2022-03-13T08:42:41.928436506Z&#8…

    数据库 2023年6月9日
    0131
  • jmeter-操作mysql

    1. 环境:jmeter5.3,mysql5.7。 提取码:ZHEN 3. 操作 ①. 测试计划内导入jdbcjar包 ②. jmeter内添加👉线程组,点击”添加→配…

    数据库 2023年6月14日
    0102
  • 设计模式之(10)——桥接模式

    Hello,大家好,我们的设计模式系列中断了几天,今天我们继续,那么我们下面继续来说一种结构型设计模式,那就是大名鼎鼎的”桥接模式”。 定义:桥接模式的官方…

    数据库 2023年6月14日
    0115
  • mac(m1)配置my.cnf

    今天开始学习了数据库,在安装MySQL之后启动一直报错,然后在网上找了很多解决方法,最后用以下方法解决 对于习惯了windows的小伙伴来说,直接去安装目录里边修改my.ini就可…

    数据库 2023年6月16日
    085
  • 剑指 Offer II 091. 粉刷房子

    剑指 Offer II 091. 粉刷房子 动态规划当前粉刷房子的花费可以由上一家粉刷房子的花费推导出来,所以可以使用动态规划求解这道题。首先确定dp数组的含义,每个房子都可以被粉…

    数据库 2023年6月16日
    0124
  • 获取本机MAC地址

    需添加引用:System.Management.dll //////public string GetMacAddress(){string mac =””…

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