我正在尝试编写一个程序来检查 YouTube 视频是否属于音乐类别。我已经写了一些代码,但它几乎就像 Python 对我“撒谎”一样。这是代码
>>> from bs4 import BeautifulSoup
>>> from urllib.request import urlopen
>>> url = "https://www.youtube.com/watch?v=LXuNNqoo1WQ"
>>> html = urlopen(url).read()
>>> soup = BeautifulSoup(html, "html.parser")
>>> tags = soup.find_all(class_="content watch-info-tag-list")
>>> hasmusictag = 'href="/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ">Music</a>' in
tags[0]
>>> print(hasmusictag)
False
>>> print(tags[0])
<ul class="content watch-info-tag-list">
<li><a class=" yt-uix-sessionlink spf-link " data-
sessionlink="ei=udFWWrG5EYqB8wSag5rgCg" href="/channel/UC-9-
kyTW8ZkZNDHQJ6FgpwQ">Music</a></li>
</ul>
如您所见,hasmusictag 应该返回 true,但它返回 false。我不知道为什么。感谢所有帮助!
我不认为@Jay 试图告诉您
in
运算符会引发异常,而是您期望 in
运算符以与字符串相同的方式工作。在本例中, tags[0]
是 bs4.element.Tag
类的实例,显然, in
运算符(凭借 __contains__
运算符重载方法)不是以这种方式实现的。
有很多方法可以让这项工作按照您想要的方式进行,但也许最简单的方法是编写以下内容:
hasmusictag = 'href="/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ">Music</a>' in str(tags[0])