博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
还没被玩坏的robobrowser(5)——Beautiful Soup的过滤器
阅读量:7065 次
发布时间:2019-06-28

本文共 945 字,大约阅读时间需要 3 分钟。

背景

本节的知识还是属于Beautiful Soup的内容。

Beautiful Soup的find和find_all方法非常强大,他们支持下面一些类型的过滤器。

字符串

最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容,下面的例子用于查找文档中所有的<b>标签:

soup.find_all('b')

正则表达式

如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容.下面例子中找出所有以b开头的标签,这表示<body><b>标签都应该被找到:

import refor tag in soup.find_all(re.compile("^b")):      print(tag.name)

下面代码找出所有名字中包含”t”的标签:

for tag in soup.find_all(re.compile("t")):      print(tag.name)

列表

如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有<a>标签和<b>标签:

soup.find_all(["a", "b"])

True

True 可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点

for tag in soup.find_all(True):  print(tag.name)

方法

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

下面方法校验了当前元素,如果包含 class 属性却不包含 id 属性,那么将返回 True:

def has_class_but_no_id(tag):  return tag.has_attr('class') and not tag.has_attr('id')

将这个方法作为参数传入 find_all() 方法,将得到所有

标签:

soup.find_all(has_class_but_no_id)

文本版权归乙醇所有,欢迎转载,但请标明出处。

下一节:点击链接

你可能感兴趣的文章
jQuery Ajax
查看>>
压缩感知中的数学知识:稀疏、范数、符号arg min
查看>>
《JavaScript高级程序设计》笔记
查看>>
刚刚在园里看到的一个简单的做连接字符串的方法.
查看>>
JQ_简单瀑布流
查看>>
测试管理-测试问题监控
查看>>
thinkphp的taglib的使用方法
查看>>
tecplot批量导出图片_Fluent 后处理软件Tecplot宏批量处理cas,dat为图片
查看>>
锂电池放空后充不进电_充电锂电池,只几个月不用,为什么就再也充不进电了?...
查看>>
golang mutex 初始化_Golang连接池的几种实现案例
查看>>
docker可以把应用及其相关的_等离子表面处理机相关应用及其特点
查看>>
发电厂电气部分第三版pdf_喜讯、大唐锡林浩特发电厂660mw机组投产运行
查看>>
java语言新特性_Java语言的新特性
查看>>
java try finally_Java中try、finally语句中有return时的执行情况 [转]
查看>>
java io nio nio2_Java 对象序列化 NIO NIO2详细介绍及解析
查看>>
java截取字符串第二次字母_java截取字符串中出现次数最多的字母
查看>>
java教务选课系统源代码_基于jsp的教务选课系统-JavaEE实现教务选课系统 - java项目源码...
查看>>
java通过文件名运行_Java 从返回文件名获取内容类型
查看>>
java中双精度型变量_java中的基本数据类型
查看>>
java运行csh文件_Java,Prel,Csh界面
查看>>