【问题标题】:How to find a string in a HTML document, ignoring whitespace?如何在 HTML 文档中查找字符串,忽略空格?
【发布时间】:2013-08-21 19:26:31
【问题描述】:

我正在尝试在多个 HTML 页面中查找字符串“USB 2 端口”。问题是字符串前面有大量空白 - 有时是 4、20 甚至 50 个空白字符。

以下内容适用于我的字符串前面的单个空格字符:

soup.find(text=' USB 2 ports')

注意USB前面的单个空格。

如何让 Beautiful Soup 的 find() 在忽略所有前面的空格的情况下找到我的字符串?

【问题讨论】:

    标签: python html-parsing beautifulsoup


    【解决方案1】:

    您可以定义 regular expression 来搜索文本,而不考虑前导和尾随空格:

    import re
    pattern = re.compile(r'\s*%s\s*' % 'USB 2 ports')
    result = soup.find(text=pattern)
    

    例如:

    >>> soup = BeautifulSoup("""
    ... <html>
    ...   <body>
    ...     <ul>
    ...       <li>
    ...         USB 2 ports
    ...       </li>
    ...       <li>
    ...         Firewire ports
    ...       </li>
    ...       <li>
    ...         HDMI ports
    ...       </li>
    ...     </ul>
    ...   </body>
    ... </html>
    ... """)
    >>> import re
    >>> pattern = re.compile(r'\s*%s\s*' % 'USB 2 ports')
    >>> soup.find(text=pattern)
    u'\n        USB 2 ports\n      '
    

    编辑:我更改了上面的代码,将soup.find() 的结果显式分配给一个变量,希望能更清楚地了解发生了什么。为了清楚起见,我最初在您的示例代码之后对我的答案中的代码进行了建模,但我现在怀疑您可能对该代码的实际作用有些困惑。

    【讨论】:

    • 由于某种原因,这没有返回,我尝试使用另一个字符串值,当我尝试打印模式时,我在 0x00000000028C2C50> 处得到 <_sre.sre_pattern>
    • @Ninja2k 我认为您的代码肯定还有其他问题;它非常适合我(我在上面添加的演示是 Python 2.7.3 解释器的直接复制粘贴)。
    • 另外:是的,当你打印pattern 时你会得到它,因为它一个正则表达式模式。 soup.find(text=pattern) 的返回值就是结果。
    • 啊是的,是的,我需要使它等于一个变量并打印它的结果。现在我看到它有效,完美。
    猜你喜欢
    • 2015-02-18
    • 2014-05-29
    • 1970-01-01
    • 2015-12-17
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多