使用正则表达式在Beautiful Soup中查找标签?
我真的希望能够让Beautiful Soup匹配任何标签列表,比如这样。我知道attr可以接受正则表达式,但在Beautiful Soup中有没有什么方法可以做到这一点呢?
soup.findAll("(a|div)")
输出:
<a> ASDFS
<div> asdfasdf
<a> asdfsdf
我的目标是创建一个抓取工具,可以从网站上提取表格。有时候标签的命名不一致,我希望能够输入一个标签列表来指定表格中“数据”部分的标签。
3 个回答
7
是的,可以查看文档...
http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
import re
soup.findAll(re.compile("^a$|(div)"))
92
请注意,你也可以使用正则表达式来在标签的属性中进行搜索。举个例子:
import re
from bs4 import BeautifulSoup
soup.find_all('a', {'href': re.compile(r'crummy\.com/')})
这个例子会找到所有链接到包含字符串 'crummy.com'
的网站的 <a>
标签。
55
find_all()
是 Beautiful Soup 搜索 API 中最常用的方法。
你可以传入不同的过滤条件。此外,还可以传入一个列表来查找多个标签:
>>> soup.find_all(['a', 'div'])
示例:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<html><body><div>asdfasdf</div><p><a>foo</a></p></body></html>')
>>> soup.find_all(['a', 'div'])
[<div>asdfasdf</div>, <a>foo</a>]
或者你可以使用正则表达式来查找包含 a
或 div
的标签:
>>> import re
>>> soup.find_all(re.compile("(a|div)"))