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

时间:2014-05-06 05:13:15

标签: python html web-scraping html-parsing beautifulsoup

正如它所说的那样。是否有搜索整个DOM的特定文本,例如 CAPTCHA 字?

1 个答案:

答案 0 :(得分:3)

您可以使用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>

如果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>

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

,也可以实现同样的效果
>>> import re
>>> soup.find(text=re.compile('CAPTCHA')).parent
<div class="myclass2">Here CAPTCHA is a part of a sentence</div>