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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能