71

I modified an html file by removing some of the tags using beautifulsoup. Now I want to write the results back in a html file. My code:

from bs4 import BeautifulSoup
from bs4 import Comment

soup = BeautifulSoup(open('1.html'),"html.parser")

[x.extract() for x in soup.find_all('script')]
[x.extract() for x in soup.find_all('style')]
[x.extract() for x in soup.find_all('meta')]
[x.extract() for x in soup.find_all('noscript')]
[x.extract() for x in soup.find_all(text=lambda text:isinstance(text, Comment))]
html =soup.contents
for i in html:
    print i

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

Since I used soup.prettify, it generates html like this:

<p>
    <strong>
     BATAM.TRIBUNNEWS.COM, BINTAN
    </strong>
    - Tradisi pedang pora mewarnai serah terima jabatan pejabat di
    <a href="http://batam.tribunnews.com/tag/polres/" title="Polres">
     Polres
    </a>
    <a href="http://batam.tribunnews.com/tag/bintan/" title="Bintan">
     Bintan
    </a>
    , Senin (3/10/2016).
</p>

I want to get the result like print i does:

<p><strong>BATAM.TRIBUNNEWS.COM, BINTAN</strong> - Tradisi pedang pora mewarnai serah terima jabatan pejabat di <a href="http://batam.tribunnews.com/tag/polres/" title="Polres">Polres</a> <a href="http://batam.tribunnews.com/tag/bintan/" title="Bintan">Bintan</a>, Senin (3/10/2016).</p>
<p>Empat perwira baru Senin itu diminta cepat bekerja. Tumpukan pekerjaan rumah sudah menanti di meja masing masing.</p>

How can I get a result the same as print i (ie. so the tag and its content appear on the same line)? Thanks.

0

3 Answers 3

123

Just convert the soup instance to string and write:

with open("output1.html", "w") as file:
    file.write(str(soup))
Sign up to request clarification or add additional context in comments.

1 Comment

If you get encoding issues use this with open("output1.html", "w", encoding='utf-8') as file:
48

For Python 3, unicode was renamed to str, but I did have to pass in the encoding argument to opening the file to avoid an UnicodeEncodeError.

with open("output1.html", "w", encoding='utf-8') as file:
    file.write(str(soup))

Comments

11

Use unicode to be safe:

with open("output1.html", "w") as file:
    file.write(unicode(soup))

1 Comment

For the benefit of future readers, as mentioned by @andytham, you can only use unicode() for Python 2; use str() instead for Python 3

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.