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

使用Python爬虫抓取官方单曲排行榜网站倒计时数据失败如何解决

问题原因

  • 代码缩进错误:if meme == "3": 下方的函数定义、调用逻辑缩进不符合Python语法规则,若输入值不为3,调用cd()会直接抛出函数未定义错误
  • find_all参数使用错误:
    • 标签名参数错误传入了"div#",正确的标签名应为div,#是CSS选择器语法,不适用于find_all的第一个标签参数
    • 同时传入id="countdown"和class_="days"存在逻辑错误,id为countdown的是倒计时外层容器,类为days的是容器下单独存放天数的子元素,二者是父子节点关系,不存在于同一个标签上
    • 额外传入的text="count"参数无意义,目标节点不存在值为count的文本内容
  • 若修复上述参数后仍返回空结果,说明该倒计时数据是前端JavaScript动态渲染的,requests只能拉取静态HTML源码,无法获取JS执行后生成的动态内容

修复后的静态爬取代码(仅针对静态渲染场景)

import requests
from bs4 import BeautifulSoup

meme = input("Number: ")
def cd():
    url = 'https://www.officialcharts.com/charts/singles-chart/'
    req = requests.get(url)
    soup = BeautifulSoup(req.content, 'html.parser')
    # 先匹配外层倒计时容器,再查找内部的天数节点
    countdown_container = soup.find(id="countdown")
    if countdown_container:
        days = [i.text.strip() for i in countdown_container.find_all(class_="days")]
        print(days)
    else:
        print("未找到倒计时容器,内容为动态渲染,请改用selenium等动态爬取工具")

if meme == "3":
    cd()

动态内容解决方案

如果确认内容是JS动态渲染的,改用selenium模拟浏览器加载页面后再提取内容,核心流程如下:

  1. 安装selenium和对应版本的浏览器驱动
  2. 用selenium打开目标页面,等待倒计时节点加载完成
  3. 提取对应节点的文本内容即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:03