6

I have a html file where I would like to insert a <meta> tag between the <head> & </head> tags using python. If I open the file in append mode how do I get to the relevant position where the <meta> tag is to be inserted?

alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195
richie
  • 17,568
  • 19
  • 51
  • 70
  • 6
    What you describe isn't appending, it is inserting (as you yourself state). Append mode allows you to add to the end of the file, and thus won't help here. – Scott Hunter Oct 01 '13 at 18:26

1 Answers1

21

Use BeautifulSoup. Here's an example where a meta tag is inserted right after the title tag using insert_after():

from bs4 import BeautifulSoup as Soup

html = """
<html>
<head>
<title>Test Page</title>
</head>
<body>
<div>test</div>
</html>
"""
soup = Soup(html)

title = soup.find('title')
meta = soup.new_tag('meta')
meta['content'] = "text/html; charset=UTF-8"
meta['http-equiv'] = "Content-Type"
title.insert_after(meta)

print soup

prints:

<html>
    <head>
        <title>Test Page</title>
        <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
    </head>
    <body>
        <div>test</div>
    </body>
</html>

You can also find head tag and use insert() with a specified position:

head = soup.find('head')
head.insert(1, meta)

Also see:

Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195
  • One way to do it: with open("/file/name.html", "r") soup = Soup(file) title = soup.find('title') meta = soup.new_tag('meta') meta['content'] = "text/html; charset=UTF-8" meta['http-equiv'] = "Content-Type" title.insert_after(meta) with open("/file/name.html", "w") as f: f.write(str(soup)) It worked for me, thanks. – khaz Nov 14 '20 at 19:39