Python3网络爬虫教程14——BeautifulSoup4之搜索文档树

2024-06-04 18:08

本文主要是介绍Python3网络爬虫教程14——BeautifulSoup4之搜索文档树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上接:
Python3网络爬虫教程13——BeautifulSoup4基本使用及遍历文档树
https://blog.csdn.net/u011318077/article/details/86633392

5.3. 搜索文档树

5.3.1. 过滤器

  • find_all()

  • find_all() 方法将返回文档中符合条件的所有tag

  • 过滤器

    • 过滤器可以被用在tag的name中,节点的属性中,字符串中或他们的混合中

    • 传入字符串

      • soup.find_all(‘b’)
    • 传入正则表达式

      • 找出所有以b开头的标签
      • soup.find_all(re.compile(r"^b"))
      • 找出所有名字中包含”t”的标签
      • soup.find_all(re.compile(r"t"))
    • 参考实例67_18

    • 传入列表参数,

    • Beautiful Soup会将与列表中任一元素匹配的内容返回.

    • 返回值也是一个列表

    • soup.find_all([“a”, “b”])

    • 传入True,True 可以匹配任何值,

    • 下面代码查找到所有的tag,但是不会返回字符串节点

    • oup.find_all(True)

    • 参考实例67_19

  • 方法

    • 没有合适的过滤器,可以定义一个方法
    • 方法只接受一个元素参数,如果这个方法返回 True
    • 表示当前元素匹配并且被找到,如果不是则反回 False
    • 参考实例67_20

5.3.2. find_all()的参数使用

  • find_all()的参数使用
  • find_all( name , attrs , recursive , string , **kwargs )
    • name 参数

    • 可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉

    • keyword 参数

    • 如果一个指定名字的参数不是搜索内置的参数名,

    • 搜索时会把该参数当作指定名字tag的属性来搜索,如果包含一个名字为 id 的参数,

    • Beautiful Soup会搜索每个tag的”id”属性

    • 有些tag属性在搜索不能使用,比如HTML5中的 data-* 属性

    • 但是可以通过 find_all() 方法的 attrs 参数

    • 定义一个字典参数来搜索包含特殊属性的tag

    • 参考实例67_21

5.3.3. CSS搜索

  • 标识CSS类名的关键字 class 在Python中是保留字,

    • 使用 class 做参数会导致语法错误.从Beautiful Soup的4.1.1版本开始,
    • 可以通过 class_ 参数搜索有指定CSS类名的tag
  • class_ 参数

    • 同样接受不同类型的 过滤器 ,字符串,正则表达式,方法或 True
    • 参考实例67_22
  • string 参数

    • 搜文档中的字符串内容.与 name 参数的可选值一样
    • soup.find_all(string=“Elsie”)
    • 和tag标签混合使用
    • soup.find_all(“a”, string=“Elsie”)
  • 补充

  • find_all() 几乎是Beautiful Soup中最常用的搜索方法

  • 语法可以简写,以下写法等价

      soup.find_all("a")soup("a")soup.title.find_all(string=True)soup.title(string=True)
    

5.3.4. find()

  • find( name , attrs , recursive , string , **kwargs )

  • 比如文档中只有一个标签,那么使用 find_all() 方法

  • 来查找标签就不太合适,

  • 使用 find_all 方法并设置 limit=1 参数不如直接使用 find() 方法

  • 下面代码等价

      soup.find_all('title', limit=1)[<title>The Dormouse's story</title>]soup.find('title')<title>The Dormouse's story</title>- 唯一的区别是 find_all() 方法的返回结果是值包含一个元素的列表,- 而 find() 方法直接返回结果     
    
  • find_parents( name , attrs , recursive , string , **kwargs )

  • find_parent( name , attrs , recursive , string , **kwargs )

  • find_all() 和 find() 只搜索当前节点的所有子节点,孙子节点等.

  • find_parents() 和 find_parent() 用来搜索当前节点的父辈节点,

  • find_all_next() 和 find_next()

  • find_all_previous() 和 find_previous()

5.4. 修改文档树

  • 修改方法类似python中的赋值

  • 语法如下
    soup = BeautifulSoup(‘Extremely bold’)
    tag = soup.b

    tag.name = “blockquote”
    tag[‘class’] = ‘verybold’
    tag[‘id’] = 1
    tag

    Extremely bold

本章案例较多:
源代码请到GITHUB下载:
https://github.com/FangbaiZhang/TLXY_study_note/tree/master/Spider

下接:
Python3网络爬虫教程15——BeautifulSoup4中的编码,格式化,解析器的区别
https://blog.csdn.net/u011318077/article/details/86633466

这篇关于Python3网络爬虫教程14——BeautifulSoup4之搜索文档树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030737

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是