在python 3中用漂亮的汤在html中向上移动子标记



我需要用beautiuloup脚本编辑大量的html文件。我的一些html文件包含如下块,其中img标记嵌套在标记中。

<p>
<a class="" data-api-endpoint="https://hcpss.instructure.com/api/v1/courses/124/grade-1-routines" data-api-returntype="Page" href="grade-1-routines.html" id="" target="" title="">
<img alt="1-icon-file-download.png" data-api-endpoint="https://hcpss.instructure.com/api/v1/courses/124/files/3523713" data-api-returntype="File" src="1-icon-file-download.png"/>
</a>
<a class="instructure_file_link instructure_scribd_file" data-api-endpoint="https://hcpss.instructure.com/api/v1/courses/124/files/3523689" data-api-returntype="File" href="closure_at_a_glance.docx" id="" target="" title="closure_at_a_glance.docx">
Closure at a Glance
</a>
</p>

这个标签链导致我将html文件导入到的程序出现问题。为了解决这个问题,我想完全删除周围的一个标签,这样结果会是这样的。

<p>
<img alt="1-icon-file-download.png" data-api-endpoint="https://hcpss.instructure.com/api/v1/courses/124/files/3523713" data-api-returntype="File" src="1-icon-file-download.png"/>
<a class="instructure_file_link instructure_scribd_file" data-api-endpoint="https://hcpss.instructure.com/api/v1/courses/124/files/3523689" data-api-returntype="File" href="closure_at_a_glance.docx" id="" target="" title="closure_at_a_glance.docx">
Closure at a Glance
</a>
</p>

我尝试了一个可以在这里执行此操作的脚本。

for img in soup.find_all('img'):
if img.parent.name == 'a':
img.parent.decompose()
print(img)

运行脚本会产生。。。

<None></None>

在控制台中,导致和标记都被删除。我能做些什么来修改这个脚本,以便只删除父脚本,而由子脚本代替它?

您可以使用replace_with()

for img in soup.find_all('img'):
parent = img.parent
if parent.name == 'a':
parent.replace_with(img)
print(soup)

输出

<p>
<img alt="1-icon-file-download.png" data-api-endpoint="https://hcpss.instructure.com/api/v1/courses/124/files/3523713" data-api-returntype="File" src="1-icon-file-download.png"/>
<a class="instructure_file_link instructure_scribd_file" data-api-endpoint="https://hcpss.instructure.com/api/v1/courses/124/files/3523689" data-api-returntype="File" href="closure_at_a_glance.docx" id="" target="" title="closure_at_a_glance.docx">
Closure at a Glance
</a>
</p>

最新更新