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

Python 抓取 Genius 网站歌词返回内容被截断的问题求助

问题根因

  • 文件写入模式错误:你在遍历歌词标签的循环内部用w(覆盖写入)模式打开文件,每匹配到一个歌词容器标签,就会清空之前写入的内容,最终文件只会保留最后一个标签的歌词内容,自然出现截断。
  • 未携带请求头:Genius对无标识的请求会返回截断的页面内容,甚至触发反爬拦截。
  • 选择器兼容性不足:Genius的页面结构有过多次迭代,你使用的混合选择器可能漏匹配部分歌词容器。

修复方案

  1. 将文件打开逻辑移到标签遍历的外层,先拼接所有匹配到的歌词内容再一次性写入,避免覆盖
  2. 给requests请求添加标准UA头,模拟浏览器访问,避免反爬返回不完整页面
  3. 优化索引获取和路径处理逻辑,提升兼容性

修复后代码如下:

import requests
from bs4 import BeautifulSoup
from time import time
import os

urls = ['https://genius.com/The-Stooges-1969-lyrics','https://genius.com/The-Stooges-1970-lyrics',
        'https://genius.com/The-Rolling-Stones-19th-Nervous-Breakdown-lyrics','https://genius.com/Lil-Wayne-3-Peat-lyrics',
        'https://genius.com/RunDMC-30-Days-lyrics','https://genius.com/Bob-marley-and-the-wailers-four-hundred-years-lyrics',
        'https://genius.com/The-Clash-48-Hours-lyrics']

# 自定义存储路径,自动创建目录避免报错
save_path = "./lyrics"
os.makedirs(save_path, exist_ok=True)

# 添加UA头模拟浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

start = time()

# 用enumerate直接获取索引,避免list.index的性能问题和重复URL匹配错误
for idx, u in enumerate(urls):
    resp = requests.get(u, headers=headers)
    resp.encoding = "utf-8"
    soup = BeautifulSoup(resp.text, 'lxml')
    full_lyrics = []
    # 兼容多版本页面的歌词选择器
    for tag in soup.select('div[class^="Lyrics__Container"], .song_body-lyrics p, div[class*="lyrics"]'):
        lyrics = tag.get_text(strip=True, separator='\n')
        if lyrics.strip():
            full_lyrics.append(lyrics)
    # 所有歌词拼接完成后一次性写入文件
    with open(os.path.join(save_path, f"{idx}.txt"), 'w', encoding="utf-8") as f:
        f.write("\n".join(full_lyrics))      

print(f'Time taken: {time() - start}')
  • 代码指定了文件编码为utf-8,避免不同系统下写入出现乱码
  • 用os.path.join处理路径,适配Windows、macOS、Linux的路径规则,不会出现转义错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:15:02