Python BeautifulSoup 过滤器

2023-04-17 00:00:00 python beautifulsoup 过滤器

Python的BeautifulSoup库提供了各种过滤器,可以针对具体的需求来筛选HTML中的元素。以下是一些常用的过滤器:

  1. 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的标签。

  1. find(name, attrs, recursive, text, **kwargs)

这个方法和find_all()方法类似,但是它只返回第一个符合条件的元素。

  1. select(css_selector)

这个方法可以使用CSS选择器来查找HTML中的元素。例如,select("p a")表示查找所有<a>标签的父级<p>标签。

  1. 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)

相关文章