BeautifulSoup和Python的新功能。我想知道是否有一种方法可以在结束标签之后投放标签,并在开始标签之前关闭标签。还是应该修改我的树?如您所见,p标签被视为标题的子级,也被视为父级。
这是我的示例代码:
<title>
<p> Title Name 1 </p>
</title>
<p> Paragraph 1 </p>
<p> Paragraph 2 </p>
<p> Paragraph 3 </p>
<title>
<p> Title Name 2 </p>
</title>
这就是我想要的...
<title>
<p> Title Name 1 </p>
</title>
**<new_tag>**
<p> Paragraph 1 </p>
<p> Paragraph 2 </p>
<p> Paragraph 3 </p>
**</new_tag>**
<title>
<p> Title Name 2 </p>
</title>
每次我尝试做soup.find_all('p)或soup.findChildren('p)时,我都没有得到想要的p标签,或者我抓住了它们,因此new_tag被添加到每个p标签中。 它在下面创建输出。有没有一种方法可以清理new_tag并使它看起来像上面的理想输出。
<title>
<new_tag>
<p> Title Name 1 </p>
<new_tag>
</title>
<new_tag>
<p> Paragraph 1 </p>
</new_tag>
<new_tag>
<p> Paragraph 2 </p>
</new_tag>
<new_tag>
<p> Paragraph 3 </p>
</new_tag>
<title>
<new_tag>
<p> Title Name 2 </p>
</new_tag>
</title>
答案 0 :(得分:1)
以问题中的示例为例,似乎可以提取所有标签并将'new_tag'
插入适当的位置:
p_tags = soup.find_all('p')[1:-1:]
new_tag = soup.new_tag('new_tag')
titles = soup.find_all('title')
titles[0].insert_after(new_tag)
for tag in p_tags:
new_tag.append(tag)
new_tag.insert_after(titles[1])
结果:
>>> print(soup.prettify())
<title>
<p>
Title Name 1
</p>
</title>
<new_tag>
<p>
Paragraph 1
</p>
<p>
Paragraph 2
</p>
<p>
Paragraph 3
</p>
</new_tag>
<title>
<p>
Title Name 2
</p>
</title>
似乎符合期望的结果。