如何在 Python 中使用 BeautifulSoup 保存对 HTML 文件所做的更改?

Posted

技术标签:

【中文标题】如何在 Python 中使用 BeautifulSoup 保存对 HTML 文件所做的更改?【英文标题】:How to save back changes made to a HTML file using BeautifulSoup in Python? 【发布时间】:2012-12-31 10:09:48 【问题描述】:

我有下面的脚本,它修改了 html 文件中的href 属性(将来,它将是目录中的 HTML 文件列表)。使用 BeautifulSoup,我设法访问标签值并按照我的意愿修改它们,但我不知道如何保存对文件所做的更改。

import os
import re
from bs4 import BeautifulSoup


htmlDoc = open('adding_computer_c.html',"r+")
soup = BeautifulSoup(htmlDoc)

replacements= [ ('_', '-'), ('../tasks/', prefixUrl), ('../concepts/', prefixUrl) ]

for link in soup.findAll('a', attrs='href': re.compile("../")):


    newlink=str(link)

    for k, v in replacements:

        newlink = newlink.replace(k, v)

    extrachars=newlink[newlink.find("."):newlink.find(">")]
    newlink=newlink.replace(extrachars,'')


    link=newlink
    print(link)
    ##How do I save the link I have modified back to the HTML file?

print(soup)##prints the original html tree

htmlDoc.close()

【问题讨论】:

【参考方案1】:
newlink = link['href']
# .. make replacements
link['href'] = newlink # store it back

现在print(soup.prettify()) 将显示更改的链接。要将更改保存到文件:

htmlDoc.close()

html = soup.prettify("utf-8")
with open("output.html", "wb") as file:
    file.write(html)

要保留文档的原始字符编码,您可以使用soup.original_encoding 而不是“utf-8”。见Encodings。

【讨论】:

我这样做了,但我达到了最大递归深度。知道为什么吗? 对于 Python 3,您必须使用:open("output.html", "wt") @BrunoGabuzomeu 错了。 soup.prettify('utf-8') 返回字节,因此必须使用“wb”,如答案所示。

以上是关于如何在 Python 中使用 BeautifulSoup 保存对 HTML 文件所做的更改?的主要内容,如果未能解决你的问题,请参考以下文章

Python - 分配打印输出csv

python beautifulsoup获取特定html源码

用python的BeautifulSoup分析html

如何用 Beautifulsoup 解析“数据文本”? [复制]

运行 pub get 时出错:无法重命名目录,因为它正在被另一个进程使用

Linux中安装pip和BeautifulSoup(bs4)