首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从pytube数组中提取元素产生错误

从pytube数组中提取元素产生错误
EN

Stack Overflow用户
提问于 2018-02-23 00:52:47
回答 2查看 434关注 0票数 0

我试图从数组中提取元素并将其赋值给变量,但它给出了这个错误:

代码语言:javascript
复制
Traceback (most recent call last):
    File "test.py", line 12, in <module>
    itag_start =  element.find(itag)
AttributeError: 'Stream' object has no attribute 'find'

这是我的代码

代码语言:javascript
复制
from pytube import YouTube
link = YouTube('http://youtube.com/watch?v=9bZkp7q19f0')
array = link.streams.all()
itag = 'itag'
mime_type='mime_type'
res='res'
counter = 0
iv = []
mt = []
re = []
    for element in array :
        itag_start =  element.find(itag)
        if itag_start != -1:
            itag_end = element.find('"', itag_start+len(itag)+2)
            itag_value = element[itag_start+len(itag)+1:itag_end+1]
            iv.insert(counter,itag_value)
        mime_type_start =  element.find(mime_type)
        if mime_type_start != -1:
            mime_type_end = element.find('"', mime_type_start+len(mime_type)+2)
            mime_type_value = element[mime_type_start+len(mime_type)+1:mime_type_end+1]
            mt.insert(counter,mime_type_value)

        res_start =  element.find(res)
        if res_start != -1:
            res_end = element.find('"', res_start+len(res)+2)
            res_value = element[res_start+len(res)+1:res_end+1]
            re.insert(counter,res_value)
         counter = counter + 1

但是,如果我直接用输出替换link.streams.all(),错误就会消失。

代码语言:javascript
复制
[<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2">,
 <Stream: itag="43" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp8.0" acodec="vorbis">,
 <Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2">,
 <Stream: itag="36" mime_type="video/3gpp" res="240p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">,
 <Stream: itag="17" mime_type="video/3gpp" res="144p" fps="30fps" vcodec="mp4v.20.3" acodec="mp4a.40.2">,
 <Stream: itag="137" mime_type="video/mp4" res="1080p" fps="30fps" vcodec="avc1.640028">,
 <Stream: itag="248" mime_type="video/webm" res="1080p" fps="30fps" vcodec="vp9">,
 <Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f">,
 <Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9">,
 <Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401e">,
 <Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9">,
 <Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e">,
 <Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9">,
 <Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015">,
 <Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9">,
 <Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c">,
 <Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9">,
 <Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2">,
 <Stream: itag="171" mime_type="audio/webm" abr="128kbps" acodec="vorbis">,
 <Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus">,
 <Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus">,
 <Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus">]

有什么办法解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2018-08-10 09:05:35

更改您的行:

代码语言:javascript
复制
textitag_start =  element.find(itag)

代码语言:javascript
复制
itag_start =  str(element).find(itag)

由语句array = link.streams.all()生成的PyTube的流列表创建非引号字符串的列表元素。.find(itag)必须对字符串进行操作,这就是为什么会出现错误,PyTube列表元素不是字符串。

使用str(element)将PyTube列表元素转换为字符串。需要注意的是,.download语句中使用的PyTube列表元素不能用引号括起来,它们必须保留其在流列表中的原始格式。

票数 0
EN

Stack Overflow用户

发布于 2020-11-13 13:37:36

如果你检查你得到的流的类型

代码语言:javascript
复制
video = yt.streams.all()
for i in video:
    print(type(i))

输出将如下所示:

.find属性仅适用于string类类型。使用str类型强制转换元素。

itag_start =str(元素).find(Itag)

并将所有元素替换为str( element.find ).find

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48933024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档