我正在尝试提取"视频";并打印控制台中有多少。
但我得到这个错误:
TypeError: 'NoneType' object is not subscriptable
这是我的代码:
import requests
from bs4 import BeautifulSoup
Web_url = "https://watch.plex.tv/show/hannibal/season/1/episode/9"
r = requests.get(Web_url)
soup = BeautifulSoup(r.content, 'html.parser')
video_tags = soup.find_all("video")
print("Total", len(video_tags), "videos found")
if len(video_tags) !=0:
for video_tag in video_tags:
video_url = video_tag.find("a")['href']
print(video_url)```
您可能在video_url = video_tag.find("a")['href']
行上得到了错误,因为我看不到您正在索引的任何其他地方,这就是导致此错误的原因。因此,由于video_tag.find("a")
返回None
,所以会发生错误。你应该把它包装起来进行一些错误处理,比如:
for video_tag in video_tags:
video_hl = video_tag.find("a")
if video_hl is None:
print("No hyperlinks found inside the video tag", video_tag.attrs)
continue
video_url = video_hl['href']
print(video_url)
(打印video_tag.attrs
可以帮助您对video
元素进行find
或select
的进一步检查。(
[事实上,当我运行您的代码时,我无法到达那一行,因为我找到了总共0个视频,所以for循环永远不会运行;但当我打开并检查您正在使用的丛链接时,我能找到的唯一video
标记是"立即观看"按钮(由于某种原因,当我执行您的代码的时候,它不会被刮伤(,其中没有任何a
标签,我在plex网站上查看的其他几个视频也没有。]
如果你试图获得视频源链接,而不是当浏览器不支持HTML视频时显示的超链接,你可以使用video_src = video_tag.get('src')
获得src
属性