web-dev-qa-db-ja.com

PythonでBeautifulSoupを使用してHTMLファイルに加えられた変更を保存する方法は?

以下のスクリプトは、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()
17
PepeFloyd
_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)
_

ドキュメントの元の文字エンコードを保持するには、「utf-8」の代わりに_soup.original_encoding_を使用できます。 エンコーディング を参照してください。

38
jfs