我试图在许多HTML页面中找到一个字符串“USB 2 ports”。问题是字符串前面有大量的空白区域 - 有时是4个,20个甚至50个空格字符。
以下内容适用于我的字符串前面的单个空格字符:
soup.find(text=' USB 2 ports')
请注意USB之前的单个空格。
如何告诉Beautiful Soup find()
找到我的字符串而忽略所有前面的空格?
答案 0 :(得分:2)
您可以定义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()
的结果分配给变量,希望能够更清楚地了解正在发生的事情。为了清晰起见,我最初在你的示例代码之后在我的答案中对代码进行了建模,但我现在怀疑你可能对代码实际上做了什么感到困惑。