BeautifulSoup 创建一个 <img /> 标签

BeautifulSoup create a <img /> tag

我需要创建一个 <img /> 标签。 BeautifulSoup 使用我做的代码创建一个像这样的图像标签:

soup = BeautifulSoup(text, "html5")
tag = Tag(soup, name='img')
tag.attrs = {'src': '/some/url/here'}
text = soup.renderContents()
print text

输出:<img src="/some/url/here"></img>

怎么做? : <img src="/some/url/here" />

当然可以使用 REGEX 或类似的化学方法来完成。但是我想知道是否有任何标准方法可以生成这样的标签?

不要使用 Tag() 创建新元素。使用 soup.new_tag() method:

soup = BeautifulSoup(text, "html5")
new_tag = soup.new_tag('img', src='/some/url/here')
some_element.append(new_tag)

soup.new_tag() 方法会将正确的构建器传递给 Tag() 对象,构建器负责将 <img/> 识别为空标签。

演示:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<div></div>', "html5")
>>> new_tag = soup.new_tag('img', src='/some/url/here')
>>> new_tag
<img src="/some/url/here"/>
>>> soup.div.append(new_tag)
>>> print soup.prettify()
<html>
 <head>
 </head>
 <body>
  <div>
   <img src="/some/url/here"/>
  </div>
 </body>
</html>

BS4中你也可以这样做:

img = BeautifulSoup('<img src="/some/url/here" />', 'lxml').img

print(img)
print(type(img))

这将输出:

<img src="/some/url/here"/>
<class 'bs4.element.Tag'>