使用BeautifulSoup在HTML中搜索和替换
我想用BeautifulSoup来搜索并替换 <\a>
标签,把它替换成 <\a><br>
。我知道怎么用 urllib2
打开网页,然后解析来提取所有的 <a>
标签。我的目标是把结束标签替换成结束标签加上换行标签。希望能得到一些帮助,非常感谢。
编辑
我想这可能类似于:
soup.findAll('a').
在文档中,有一段:
find(text="ahh").replaceWith('Hooray')
所以我想这可能是这样的:
soup.findAll(tag = '</a>').replaceWith(tag = '</a><br>')
但这样做不行,而且Python的帮助文档也没有提供太多信息。
3 个回答
3
你不能单独替换结束标签;在BeautifulSoup中,你处理的是一种文档对象模型,就像在浏览器里一样,而不是一串HTML字符串。所以你不能只替换结束标签而不同时替换开始标签。
你想要做的是在...<\/a>元素后面立即插入一个新的<br>
元素。为此,你需要找到元素在它的父元素中的位置,然后在那个位置后面插入新的元素。例如:
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>'
5
假设你有一个元素,里面包含了“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))
23
这段代码会在每个标签结束后插入一个
标签:
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不单独处理结束标签,它们被视为同一个元素的一部分。