Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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,'##')
like image 287
michelle Avatar asked Mar 10 '23 14:03

michelle


1 Answers

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"))  
like image 148
Martin Evans Avatar answered Mar 31 '23 06:03

Martin Evans