0

我正在尝试用Beautiful Soup做两件事:

  1. 查找并打印特定类的 div
  2. 查找并打印包含特定文本的链接

第一部分正在工作。第二部分是返回一个空列表,即[]. 在尝试解决此问题时,我创建了以下按预期工作的内容:

from bs4 import BeautifulSoup

def my_funct():
    content = "<div class=\"class1 class2\">some text</div> \
        <a href='#' title='Text blah5454' onclick='blahblahblah'>Text blah5454</a>"
    soup = BeautifulSoup(content)
    thing1 = soup("div", "class1 class2")
    thing2 = soup("a", text="Text")
    print thing1
    print thing2

my_funct()

SciTE编辑器中查看原始内容(我的实际实现)的来源之后。但是,一个区别是在链接文本之间和之间的新行上有一个LF和四个,例如:->Textblah5454

在此处输入图像描述

因此,我认为这就是我变得空虚的原因[]

我的问题是:

  1. 这是可能的原因吗?
  2. 如果是这样,“剥离”这些字符的最佳解决方案是什么?如果是这样,最好的方法是什么?
4

1 回答 1

3

text参数仅匹配整个文本内容。您需要改用正则表达式:

import re

thing2 = soup("a", text=re.compile(r"\bText\b"))

\b单词边界锚确保您只匹配整个单词,而不是部分单词。请注意r''这里使用的原始字符串文字,当解释为普通字符串时\b意味着不同的东西;如果您在这里不使用原始字符串文字,则必须将反斜杠加倍。

演示:

>>> from bs4 import BeautifulSoup
>>> content = "<div class=\"class1 class2\">some text</div> \
...         <a href='#' title='wooh!' onclick='blahblahblah'>Text blah5454</a>"
>>> soup = BeautifulSoup(content)
>>> soup("a", text='Text')
[]
>>> soup("a", text=re.compile(r"\bText\b"))
[<a href="#" onclick="blahblahblah" title="wooh!">Text blah5454</a>]
于 2013-04-20T07:59:47.430 回答