如何在python中修改html树?

时间:2014-01-05 18:44:00

标签: python html-parsing beautifulsoup

假设有一些变量片段html代码

<p>
    <span class="code"> string 1 </ span>
    <span class="code"> string 2 </ span>
    <span class="code"> string 3 </ span>
</ p>
<p>
    <span class="any"> Some text </ span>
</ p>

我需要修改所有标签的内容,使用类代码<span>通过某些函数跳过内容,例如foo,它返回修改后的标记<span>的内容。最终,我应该得到一个新的html文档:

<p>
    <span class="code"> modify string 1 </ span>
    <span class="code"> modify string 2 </ span>
    <span class="code"> modify string 3 </ span>
</ p>
<p>
    <span class="any"> Some text </ span>
</ p>

我被建议使用python库 BeautifulSoup4 可以轻松搜索特定的html节点。如何修改内容<span class="code">并将新版本另存为新文件?我想发现你需要使用soup.find_all ('span', class = re.compile ("code")),只有这个函数返回一个样本对象的list(副本),修改它不会改变汤的内容。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

</ span>是无效的HTML,即使是网络浏览器的宽松解析器也无法正确解析它。

修复HTML后,您可以使用.replaceWith()

from bs4 import BeautifulSoup

soup = BeautifulSoup('''
    <p>
        <span class="code"> string 1 </span>
        <span class="code"> string 2 </span>
        <span class="code"> string 3 </span>
    </p>
    <p>
        <span class="any"> Some text </span>
    </p>
''', 'html5lib')

for span in soup.find_all('span', class_='code'):
    span.string.replaceWith('modified ' + span.string)