Beautifulsoup:如果标签或元素未知,如何查找字符串?

Vol*_*il3 1 html python beautifulsoup html-parsing web-scraping

正如它所说的。无论如何要在整个 DOM 中搜索特定文本,例如CAPTCHA单词?

ale*_*cxe 5

您可以使用find并指定text参数:

使用文本,您可以搜索字符串而不是标签。与名称和关键字参数一样,您可以传入字符串、正则表达式、列表、函数或值 True。

>>> from bs4 import BeautifulSoup
>>> data = """
... <div>test1</div>
... <div class="myclass1">test2</div>
... <div class="myclass2">CAPTCHA</div>
... <div class="myclass3">test3</div>"""
>>> soup = BeautifulSoup(data)
>>> soup.find(text='CAPTCHA').parent
<div class="myclass2">CAPTCHA</div>
Run Code Online (Sandbox Code Playgroud)

如果CAPTCHA只是文本的一部分,您可以将lambda函数传递给text并检查是否CAPTCHA在标签文本内:

>>> data = """
... <div>test1</div>
... <div class="myclass1">test2</div>
... <div class="myclass2">Here CAPTCHA is a part of a sentence</div>
... <div class="myclass3">test3</div>"""
>>> soup = BeautifulSoup(data)
>>> soup.find(text=lambda x: 'CAPTCHA' in x).parent
<div class="myclass2">Here CAPTCHA is a part of a sentence</div>
Run Code Online (Sandbox Code Playgroud)

或者,如果您将正则表达式传递给text

>>> import re
>>> soup.find(text=re.compile('CAPTCHA')).parent
<div class="myclass2">Here CAPTCHA is a part of a sentence</div>
Run Code Online (Sandbox Code Playgroud)