简单的问题 - 搜索中间的文本<td>和</td>忽略新行的标签



我的问题可能很简单。我用BS刮了一个网页。在汤里,我确实想搜索一个文本(这里:示例(。

现在,如果汤中的内容看起来像(摘录(:

<!DOCTYPE html>
<td>example</td>

它完美地完成了工作并输出了文本(示例(。

然而,在某些情况下,内容是:

<!DOCTYPE html>
<td>
example
</td>

它没有找到它。我想这是因为我搜索的文本没有被压缩在<td><td>标签之间。

我使用的代码是:

temp = soup.find(text = 'example')

希望有人能回答这个可能非常基本的问题。

这是因为在第二个示例中,文本不再等于example,因为它包含换行符,这些换行符现在是文本的一部分。因此,您的搜索必须从";euqals";至";包含";。在beautifulsoup的情况下,这需要正则表达式。

假设这是你的html:

test = """<!DOCTYPE html>
<doc>
<td>
example
</td>
<td>example2</td>
<td>unrelated</td>
</doc>"""

然后你需要

import re

最后是

for entry in soup.find_all(text=re.compile("example")):
print(entry.strip())

输出:

example
example2

顺便说一句,在更复杂的html/xml和搜索中,不建议使用regex。您可能需要切换到像lxml这样的库。

最新更新