【问题标题】:Simple question - searching for text in between <td> and </td> tags ignoring new lines简单问题 - 在 <td> 和 </td> 标记之间搜索文本,忽略换行
【发布时间】:2021-05-05 11:57:26
【问题描述】:

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

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

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

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

但是,在某些情况下,内容是:

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

它没有找到它。我想这是因为我搜索的文本没有被压缩在 &lt;td&gt;&lt;\td&gt; 标签之间。

我使用的代码是:

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

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

【问题讨论】:

    标签: html beautifulsoup find newline


    【解决方案1】:

    这是因为在您的第二个示例中,文本不再等于 example,因为它包含现在是文本一部分的换行符。因此,您的搜索必须从“euqals”更改为“contains”。而对于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 这样的库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      相关资源
      最近更新 更多