Python BeautifulSoup 过滤器
Python的BeautifulSoup库提供了各种过滤器,可以针对具体的需求来筛选HTML中的元素。以下是一些常用的过滤器:
find_all(name, attrs, recursive, text, limit, **kwargs)
这是BeautifulSoup最常用的方法之一,可以返回一个包含所有符合条件的元素组成的列表。
name
参数指定要查找的标签名称,例如<a>
或<div>
等。如果不指定name
,则返回整个HTML文档中的所有标签。
attrs
参数是一个字典,用于指定要查找的标签的属性,例如{'class': 'content'}
表示查找所有class
属性为content
的标签。
recursive
参数指定是否递归查找子标签,默认为True
。如果设置为False
,则只会查找当前标签下的直接子标签。
text
参数可以通过标签中的文本内容来检索标签。例如text="pidancode.com"
表示查找所有文本内容包含pidancode.com
的标签。
limit
参数表示最多返回多少个结果。例如limit=3
表示最多返回3个结果。
kwargs
参数允许你以属性名称作为关键字参数来查找。例如find_all(id='header')
表示查找所有id
属性为header
的标签。
find(name, attrs, recursive, text, **kwargs)
这个方法和find_all()
方法类似,但是它只返回第一个符合条件的元素。
select(css_selector)
这个方法可以使用CSS选择器来查找HTML中的元素。例如,select("p a")
表示查找所有<a>
标签的父级<p>
标签。
select_one(css_selector)
这个方法和select()
方法类似,但是它只返回第一个符合条件的元素。
下面是示例代码:
from bs4 import BeautifulSoup html_doc = """ <html> <head> <title>pidancode.com</title> </head> <body> <div class="content"> <h1>欢迎来到皮蛋编程</h1> <p>这是一个Python编程博客。</p> <a href="http://www.pidancode.com">pidancode.com</a> </div> </body> </html> """ soup = BeautifulSoup(html_doc, 'html.parser') # 查找所有<a>标签 a_tags = soup.find_all('a') print(a_tags) # 查找所有class为content的<div>标签 div_tags = soup.find_all('div', {'class': 'content'}) print(div_tags) # 查找所有包含"pidancode.com"文本的标签 text_tags = soup.find_all(text='pidancode.com') print(text_tags) # 使用CSS选择器查找所有class为content的<div>标签的子<a>标签 sub_tags = soup.select('div.content a') print(sub_tags) # 使用CSS选择器查找第一个<a>标签 first_a_tag = soup.select_one('a') print(first_a_tag)
相关文章