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?
Asked
Active
Viewed 1.9k times
6
-
6What 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 Answers
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