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

Simple question - searching for text in between <td> and </td> tags ignoring new lines

我的问题可能很简单。我用 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 和搜索中,不推荐使用正则表达式。您可能必须切换到像 lxml 这样的库。