2

我正在编写一个脚本,使用 Beautiful Soup 4 用新的 HTML 5 音频/视频元素替换旧的 Flash 音频/视频元素,但是我很难创建以下格式的音频标签:

<audio controls>
  <source src="../../files/audios/333/MP3File.mp3" type="audio/mpeg">
</audio>

我尝试在 Python Interpreter 中使用它,但没有得到任何结果。

>>> soup = BeautifulSoup("<html></html>")
>>> nextsoup = soup.new_tag("<audio controls></audio>")


>>> nextsoup
<<audio controls></audio>></<audio controls></audio>>
>>> nextsoup = soup.new_tag("audio")
>>> nextsoup
<audio></audio>

>>> nextsoup = soup.new_tag("audio")
>>> nextsoup = soup.new_tag("audio", "controls")
>>> nextsoup
<audio></audio>
>>> nextsoup["controls"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  line 958, in __getitem__
    return self.attrs[key]
KeyError: 'controls'
>>> nextsoup["controls"] = ""
>>> nextsoup

<audio controls=""></audio>

那么有没有办法向音频添加“控件”或者我应该使用其他库?还有一种方法可以指定没有结束标签的标签,例如使用源标签?

我也尝试将元素添加为 NavigableStrings 并将它们附加到它们应该在的位置,但我遇到了编码问题,所以我尝试指定编码格式 - utf-8 然后指定soup.prettify(formatter=None) 但是脚本不断因 ascii 错误而崩溃...

4

1 回答 1

1

传递controls关键字参数并将值设置为None

>>> audio = soup.new_tag("audio", controls=None)
>>> audio.append(soup.new_tag("source", src="path", type="audio/mpeg"))
>>> soup.append(audio)
>>> print(audio.prettify())
<audio controls>
 <source src="path" type="audio/mpeg">
 </source>
</audio>
于 2016-03-11T21:10:39.587 回答