Python 对象可下标

Python 对象可下标,python,web-scraping,Python,Web Scraping,在抓取网站时,我发现以下错误: links=[tag.a[“href”]用于汤中的标记。查找所有('strong')[1:-3] TypeError:“非类型”对象不可下标 代码: 导入请求 进口期货 从bs4导入BeautifulSoup 主机=”https://www.lyrics.com" url=”https://www.lyrics.com/album/3769520/Now+20周年纪念%2C+第2卷“ #解析初始“相册”网站 req=请求。获取(url) html=req.cont

在抓取网站时,我发现以下错误:

links=[tag.a[“href”]用于汤中的标记。查找所有('strong')[1:-3]
TypeError:“非类型”对象不可下标

代码:

导入请求
进口期货
从bs4导入BeautifulSoup
主机=”https://www.lyrics.com"
url=”https://www.lyrics.com/album/3769520/Now+20周年纪念%2C+第2卷“
#解析初始“相册”网站
req=请求。获取(url)
html=req.content
soup=BeautifulSoup(html,'html.parser')
#在“相册”网站中查找所有歌曲的链接-这些链接可以在下找到
#“强”选项卡和“a”选项卡
links=[tag.a[“href”]表示汤中的标记。查找所有('strong')[1:-3]]
名称=[]
def GetLyps(url):
url=主机+url#在主机网站上可以找到歌曲
#解析“歌曲”站点
req=请求。获取(url)
html=req.content
soup=BeautifulSoup(html,'html.parser')
#获取歌词,可在“pre”选项卡下找到
names=soup.find('h1',{“id”:“歌词标题文本”})
name.append((names.text)+“.txt”)
返回soup.find('pre').text
#使用多线程实现更快的性能-我将简要介绍:
#max_workers=线程数-我们为每首歌曲使用一个单独的线程
歌词=[]
使用concurrent.futures.ThreadPoolExecutor(max_workers=len(links))作为执行器:
#每首歌。。。
对于范围内的j(len(links)):
#在单个线程上运行“GetLyps”方法并获取歌词
歌词=executor.submit(getlyms,links[j]).result()
印刷(歌词)
歌词。附加(歌词)
#用歌词做任何事。。。我只是把它们打印出来
对于范围(0,len(name)-1)中的i:
文件=打开(名称[i],“w”)
File.write(歌词[i])
File.close()文件

如果您能帮助我,我将非常感激。

您可以检查
标记。a
不是

links = [tag.a['href'] for tag in soup.find_all('strong') if tag.a is not None][1:-3]
print(links)
# output ['/lyric/35873929/Tik+Tok+%5BNOW+33%5D', ...]

建议使用
is
运算符将对象与
None
进行比较,因为它是一个单态对象,并且
is
运算符不会受到潜在的
\uuuuuueq\uuuuo()
覆盖的影响。@Arkelis在这里并没有真正关注性能。谢谢你的命令。即使是
if tag.a
本身也适用于这种情况。