12

我想使用 BeautfulSoup 来搜索和<\a>替换<\a><br>. 我知道如何打开urllib2然后解析以提取所有<a>标签。我想要做的是搜索并用结束标签加上中断替换结束标签。任何帮助,非常感谢。

编辑

我认为这将类似于:

soup.findAll('a').

在文档中,有一个:

find(text="ahh").replaceWith('Hooray')

所以我会假设它会沿着:

soup.findAll(tag = '</a>').replaceWith(tag = '</a><br>')

但这不起作用,python help() 并没有提供太多帮助

4

3 回答 3

22

这将在每个元素的末尾插入一个<br>标签:<a>...</a>

from BeautifulSoup import BeautifulSoup, Tag

# ....

soup = BeautifulSoup(data)
for a in soup.findAll('a'):
    a.parent.insert(a.parent.index(a)+1, Tag(soup, 'br'))

您不能使用soup.findAll(tag = '</a>'),因为 BeautifulSoup 不会单独对结束标签进行操作 - 它们被视为同一元素的一部分。


如果您想按照评论中的要求将<a>元素放入<p>元素中,可以使用以下命令:

for a in soup.findAll('a'):
    p = Tag(soup, 'p') #create a P element
    a.replaceWith(p)   #Put it where the A element is
    p.insert(0, a)     #put the A element inside the P (between <p> and </p>)

同样,您不会单独创建<p>and,</p>因为它们是同一事物的一部分。

于 2010-01-15T17:56:09.660 回答
4

假设您有一个您知道包含“br”标记标签的元素,用不同的字符串删除和替换“br”标签的一种方法是这样的:

originalSoup = BeautifulSoup("your_html_file.html")
replaceString = ", " # replace each <br/> tag with ", "
# Ex. <p>Hello<br/>World</p> to <p>Hello, World</p>
cleanSoup = BeautifulSoup(str(originalSoup).replace("<br/>", replaceString))
于 2015-07-07T08:17:11.300 回答
3

您不会替换结束标签;在 BeautifulSoup 中,您正在处理像在浏览器中一样的文档对象模型,而不是充满 HTML 的字符串。因此,如果不替换开始标签,您就无法“替换”结束标签。

您要做的是在<br>元素之后立即插入一个新<a>...</a>元素。为此,您需要找出该<a>元素在其父元素内的索引,并将新元素插入到该索引之后。例如。

soup= BeautifulSoup('<body>blah <a href="foo">blah</a> blah</body>')
for link in soup.findAll('a'):
    br= Tag(soup, 'br')
    index= link.parent.contents.index(link)
    link.parent.insert(index+1, br)
# soup now serialises to '<body>blah <a href="foo">blah</a><br /> blah</body>'
于 2010-01-15T17:57:23.607 回答