我想使用BeautfulSoup来搜索<\a>
并将其替换为<\a><br>
。我知道如何使用urllib2
打开,然后解析以提取所有<a>
标记。我想要做的是搜索并用结束标记和中断替换结束标记。任何帮助,非常感谢。
修改
我认为它会类似于:
soup.findAll('a').
在文档中,有一个:
find(text="ahh").replaceWith('Hooray')
所以我认为这将是:
soup.findAll(tag = '</a>').replaceWith(tag = '</a><br>')
但这不起作用,python help()不会提供太多
答案 0 :(得分:17)
这将在每个<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>
和</p>
,因为它们是同一件事的一部分。
答案 1 :(得分:5)
假设你有一个你知道的元素包含“br”标记标记,一种删除&amp;标记的方法。用不同的字符串替换“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))
答案 2 :(得分: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>'