使用 bs4 进行网络抓取:类型错误 - 'NoneType'对象不可下标



我正在尝试提取"视频";并打印控制台中有多少。

但我得到这个错误:

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元素进行findselect的进一步检查。(

[事实上,当我运行您的代码时,我无法到达那一行,因为我找到了总共0个视频,所以for循环永远不会运行;但当我打开并检查您正在使用的丛链接时,我能找到的唯一video标记是"立即观看"按钮(由于某种原因,当我执行您的代码的时候,它不会被刮伤(,其中没有任何a标签,我在plex网站上查看的其他几个视频也没有。]

如果你试图获得视频源链接,而不是当浏览器不支持HTML视频时显示的超链接,你可以使用video_src = video_tag.get('src')获得src属性

最新更新