如何在bs4代码中使用正则表达式
时间: 2024-06-08 07:06:20 浏览: 89
C#基于正则表达式抓取a标签链接和innerhtml的方法
在 Beautiful Soup 4 中使用正则表达式可以帮助我们更精确地匹配需要的内容。以下是在bs4代码中使用正则表达式的示例:
```python
import re
from bs4 import BeautifulSoup
# html页面源码
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')
# 使用正则表达式匹配所有以字母“e”开头的标签名
for tag in soup.find_all(re.compile('^e')):
print(tag.name)
# 输出结果:head, title
```
在上面的示例中,我们使用 `re.compile()` 函数创建了一个正则表达式对象,然后将其传递给 `find_all()` 方法,用于匹配标签名。这里使用的正则表达式 `^e` 表示以字母“e”开头的标签名。
除了标签名外,我们还可以使用正则表达式匹配标签属性、文本内容等。例如,以下代码演示了如何使用正则表达式匹配包含“example”字符的所有链接:
```python
import re
from bs4 import BeautifulSoup
# html页面源码
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')
# 使用正则表达式匹配所有包含“example”字符的链接
for link in soup.find_all('a', href=re.compile('example')):
print(link.get('href'))
# 输出结果:http://example.com/elsie, http://example.com/lacie, http://example.com/tillie
```
在上面的示例中,我们使用 `re.compile()` 函数创建了一个正则表达式对象,然后将其传递给 `find_all()` 方法的 `href` 参数,用于匹配链接。这里使用的正则表达式 `example` 表示包含“example”字符的链接。
阅读全文