Python - 使用beautifulSoup查找文本,然后替换原始汤变量

时间:2013-02-24 21:02:15

标签: python beautifulsoup

commentary = soup.find('div', {'id' : 'live-text-commentary-wrapper'})
findtoure = commentary.find(text = re.compile('Gnegneri Toure Yaya')).replace('Gnegneri      Toure Yaya', 'Yaya Toure')

评论中包含需要更换为Yaya Toure的Gnegneri Toure Yaya的各种情况。

findAll()不起作用,因为findtoure是一个列表。

我遇到的另一个问题是这段代码只是找到它们并将它们替换成一个名为findtoure的新变量,我需要在原汤中替换它们。

我想我只是从错误的角度来看这个。

1 个答案:

答案 0 :(得分:16)

只是 .replace(),你无法做你想做的事。来自BeautifulSoup documentation on NavigableString

  

您无法在适当的位置编辑字符串,但可以使用replace_with()将一个字符串替换为另一个字符串。

这正是你需要做的;接受每个匹配,然后在包含的文本上调用.replace()并将原始内容替换为:

findtoure = commentary.find_all(text = re.compile('Gnegneri Toure Yaya'))
for comment in findtoure:
    fixed_text = unicode(comment).replace('Gnegneri Toure Yaya', 'Yaya Toure')
    comment.replace_with(fixed_text)

如果您想进一步使用这些评论,则需要进行新的查找:

findtoure = commentary.find(text = re.compile('Yaya Toure'))

或者,如果您只需要生成的 unicode文本(所以没有连接NavigableString个对象),只需收集fixed_text个对象:

findtoure = commentary.find_all(text = re.compile('Gnegneri Toure Yaya'))
fixed_comments = []
for comment in findtoure:
    fixed_text = unicode(comment).replace('Gnegneri Toure Yaya', 'Yaya Toure')
    comment.replace_with(fixed_text)
    fixed_comments.append(fixed_text)