michelle
michelle

Reputation: 61

Using BeautifulSoup to modify HTML

I want to use Beautifulsoup to modify a whole div of a HTML. I was trying to modify the HTML, however the console output has the modifications, but the actual .html document itself is not modified. No new HTML was created.

Can someone help me?

from bs4 import BeautifulSoup,Tag
import re
import urllib2
import os.path
base=os.path.dirname(os.path.abspath(__file__))

html=open(os.path.join(base,'example.html'))
soup=BeautifulSoup(html,'html.parser')


for i in  soup.find('div',{"id":None}).findChildren():
    l=str(i);
    print l
    print l.replace(l,'##')

Upvotes: 5

Views: 14589

Answers (1)

Martin Evans
Martin Evans

Reputation: 46789

Two things:

  1. You need to add some code to write the output from BeautifulSoup back to a file.
  2. You should use replace_with() to make changes to the HTML. By converting to a string, you were just modifying a textual copy.

This can be done as follows:

from bs4 import BeautifulSoup
import os

base = os.path.dirname(os.path.abspath(__file__))
html = open(os.path.join(base, 'example.html'))
soup = BeautifulSoup(html, 'html.parser')

for i in soup.find('div', {"id":None}).findChildren():
    i.replace_with('##')

with open("example_modified.html", "wb") as f_output:
    f_output.write(soup.prettify("utf-8"))  

Upvotes: 9

Related Questions