Python“;类型错误:';内置函数或方法';对象不可下标";

Python“;类型错误:';内置函数或方法';对象不可下标";,python,typeerror,bs4,Python,Typeerror,Bs4,谢谢!! 1.看起来好像有什么错误,但我没能找到。 2.这也是,但现在遵循一个代码块: from urllib.request import Request, urlopen from urllib.error import URLError,HTTPError from bs4 import BeautifulSoup import re print('https://v.qq.com/x/page/h03425k44l2.html\\\\n\\\\https://v.qq.com/x/co

谢谢!! 1.看起来好像有什么错误,但我没能找到。 2.这也是,但现在遵循一个代码块:

from urllib.request import Request, urlopen
from urllib.error import URLError,HTTPError
from bs4 import BeautifulSoup
import re

print('https://v.qq.com/x/page/h03425k44l2.html\\\\n\\\\https://v.qq.com/x/cover/dn7fdvf2q62wfka/m0345brcwdk.html\\\\n\\\\http://v.qq.com/cover/2/2iqrhqekbtgwp1s.html?vid=c01350046ds')
web = input('请输入网址:')
if re.search(r'vid=',web) :
    patten =re.compile(r'vid=(.*)')
    vid=patten.findall(web)
    vid=vid[0]

else:
    newurl = (web.split("/")[-1])
    vid =newurl.replace('.html', ' ')
#从视频页面找出vid

getinfo='http://vv.video.qq.com/getinfo?vids{vid}&otype=xlm&defaultfmt=fhd'.format(vid=vid.strip())
def getpage(url):
    req = Request(url)
    user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit'
    req.add_header('User-Agent', user_agent)
    try:
        response = urlopen(url)
    except HTTPError as e:
        print('The server couldn\\\'t fulfill the request.')
        print('Error code:', e.code)
    except URLError as e:
        print('We failed to reach a server.')
        print('Reason:', e.reason)
    html = response.read().decode('utf-8')
    return(html)
#打开网页的函数  

a = getpage(getinfo)

soup = BeautifulSoup(a, "html.parser")
for e1 in soup.find_all('url'):
    ippattent = re.compile(r"((?:(2[0-4]\\\\d)|(25[0-5])|([01]\\\\d\\\\d?))\\\\.){3}(?:(2[0-4]\\\\d)|(255[0-5])|([01]?\\\\d\\\\d?))")
    if re.search(ippattent,e1.get_text()):
        ip=(e1.get_text())
for e2 in soup.find_all('id'):
    idpattent = re.compile(r"\\\\d{5}")
    if re.search(idpattent,e2.get_text()):
        id=(e2.get_text())
filename=vid.strip()+'.p'+id[2:]+'.1.mp4'
#找到ID和拼接FILENAME

getkey='http://vv.video.qq.com/getkey?format={id}&otype=xml&vt=150&vid{vid}&ran=0%2E9477521511726081\\\\&charge=0&filename={filename}&platform=11'.format(id=id,vid=vid.strip(),filename=filename)
#利用getinfo中的信息拼接getkey网址
b = getpage(getkey)

key=(re.findall(r'<key>(.*)<\\\\/key>',b))

videourl=ip+filename+'?'+'vkey='+key[0]

print('视频播放地址 '+videourl)
#完成了
从urllib.request导入请求,urlopen
从urllib.error导入urleror,HTTPError
从bs4导入BeautifulSoup
进口稀土
打印('https://v.qq.com/x/page/h03425k44l2.html\\\\n\\\\https://v.qq.com/x/cover/dn7fdvf2q62wfka/m0345brcwdk.html\\\\n\\\\http://v.qq.com/cover/2/2iqrhqekbtgwp1s.html?vid=c01350046ds')
web=输入('请输入网址:')
如果重新搜索(r'vid=',web):
patten=re.compile(r'vid=(.*))
vid=模式findall(网络)
vid=vid[0]
其他:
newurl=(web.split(“/”[-1])
vid=newurl.replace('.html','')
#从视频页面找出视频
getinfo=http://vv.video.qq.com/getinfo?vids{vid}&otype=xlm&defaultfmt=fhd'.格式(vid=vid.strip())
def getpage(url):
req=请求(url)
用户_代理='Mozilla/5.0(Windows NT 6.1)AppleWebKit'
请求添加标题(“用户代理”,用户代理)
尝试:
响应=urlopen(url)
除HTTPError作为e外:
打印('服务器无法完成请求')
打印('错误代码:',e.code)
除URLE错误外:
打印('我们无法访问服务器')
打印('原因:',即原因)
html=response.read().decode('utf-8')
返回(html)
#打开网页的函数  
a=getpage(getinfo)
soup=BeautifulSoup(一个“html.parser”)
用于汤中的e1。查找所有('url'):
ippatent=re.compile(r“((?:(2[0-4]\\\\\d)-(25[0-5])\\\([01]\\\\d\\\\\d?)\\\\\){3}(?(2[0-4]\\\\d)\\\(255[0-5])。([01]?\\\\\\\d?))
如果重新搜索(ippatent,e1.get_text()):
ip=(e1.get_text())
对于汤中的e2。查找所有('id'):
IDpatent=re.compile(r“\\\\d{5}”)
如果重新搜索(idpatent,e2.get_text()):
id=(e2.get_text())
filename=vid.strip()+'.p'+id[2:]+'.1.mp4'
#找到身份证件和拼接文件名
getkey=http://vv.video.qq.com/getkey?format={id}&otype=xml&vt=150&vid{vid}&ran=0%2E9477521511726081\\\\\\&charge=0&filename={filename}&platform=11'。格式(id=id,vid=vid.strip(),filename=filename)
#利用获取信息中的信息拼接getkey网址
b=getpage(getkey)
键=(关于findall(r'(.*),b))
videourl=ip+filename+'?'+'vkey='+key[0]
打印('视频播放地址 '+视频URL)
#完成了
我运行它并得到以下结果:

Traceback (most recent call last):
  File "C:\Users\DYZ_TOGA\Desktop\qq.py", line 46, in <module>
    filename=vid.strip()+'.p'+id[2:]+'.1.mp4'
TypeError: 'builtin_function_or_method' object is not subscriptable
回溯(最近一次呼叫最后一次):
文件“C:\Users\DYZ\u TOGA\Desktop\qq.py”,第46行,在
filename=vid.strip()+'.p'+id[2:]+'.1.mp4'
TypeError:“内置函数”或“方法”对象不可下标

我该怎么办?我不知道如何更改代码来更正它。谢谢:)

id
是python中的内置函数。看起来您正在使用相同的存储变量。使用关键字作为变量名是一个坏习惯。请改用其他名称。

id
是python中的内置函数。看起来您正在使用相同的存储变量。使用关键字作为变量名是一个坏习惯。请改用其他名称。

问题的根源在于:

if re.search(idpattent,e2.get_text()):
    id=(e2.get_text())
如果为false,则从不设置
id
。这意味着
id
是该名称的内置函数,它获取任何对象的唯一id。因为它是一个函数,而不是您期望的字符串,所以您不能这样做:

id[2:]
因此,您将得到错误

我的建议是:

  • 使用不同的变量名;在这种情况下,如果没有定义它,就会出现一个错误,这会使问题的解决变得更容易

  • 如果找不到ID,请不要继续脚本;反正也不行。如果你希望找到它,但不确定为什么不会发生,那么你应该单独问这个问题


  • 问题的根源在于:

    if re.search(idpattent,e2.get_text()):
        id=(e2.get_text())
    
    如果为false,则从不设置
    id
    。这意味着
    id
    是该名称的内置函数,它获取任何对象的唯一id。因为它是一个函数,而不是您期望的字符串,所以您不能这样做:

    id[2:]
    
    因此,您将得到错误

    我的建议是:

  • 使用不同的变量名;在这种情况下,如果没有定义它,就会出现一个错误,这会使问题的解决变得更容易

  • 如果找不到ID,请不要继续脚本;反正也不行。如果你希望找到它,但不确定为什么不会发生,那么你应该单独问这个问题

  • 如果上述“If”为非真,则id将不会设置为字符串值

    默认情况下,id是python函数。所以您不能执行id[2:]

    因为python需要id()

    如果上述“If”为非真,则id将不会设置为字符串值

    默认情况下,id是python函数。所以您不能执行id[2:]

    因为python需要id()