You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何BeautifulSoup无法提取div中的全部文本?

解决Genius歌词爬取不完整的问题

问题出在你只用了soup.find()——这个方法只会返回第一个匹配到的Lyrics__Container开头的div,但Genius网页里歌词是被拆分到多个同类型的div中的,所以你只拿到了前半部分。

把代码里的find改成find_all,然后遍历所有匹配的div,把文本拼接起来就能拿到完整歌词了:

from bs4 import BeautifulSoup
import re
import requests

song_api_path = '/Taylor-swift-cardigan-lyrics'
page_url = "http://genius.com" + song_api_path
page = requests.get(page_url)
soup = BeautifulSoup(page.text, "html.parser")

# 用find_all获取所有匹配的歌词div
divs = soup.find_all("div", class_=lambda value: value and re.search(r'^Lyrics__Container', value))

# 遍历所有div,拼接文本
all_text = '\n'.join([div.get_text(separator='\n') for div in divs])

print(all_text)

运行这段代码就能输出完整的《cardigan》歌词了。另外注意,Genius可能会有反爬机制,频繁请求可能会被限制,必要时可以给requests加个headers模拟浏览器请求。

内容的提问来源于stack exchange,提问作者dasousa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:47:05