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

使用BeautifulSoup爬取数据时返回None/空列表问题求助

问题分析与解决方案

核心原因

  • 动态内容渲染:该网站的课程列表是通过JavaScript动态加载的,requests.get()只能获取页面初始的静态HTML,无法获取JS后续加载的内容,导致你要找的元素不在初始响应里。
  • 动态类名:你使用的类名AllCoursesMobile_course-filter-mobile__atbp2包含动态生成的哈希后缀(atbp2),这个后缀会随请求或页面更新变化,固定写死类名自然找不到元素。

解决方法

方法一:正则匹配类名(适配动态后缀)

如果目标元素的静态结构存在于初始响应中,可以用正则匹配类名的固定前缀部分:

from bs4 import BeautifulSoup as bs
import requests
import re

s = requests.get('https://ineuron.ai/courses')
soup = bs(s.text, 'html.parser')
# 匹配类名以AllCoursesMobile_course-filter-mobile__开头的div
t = soup.find('div', class_=re.compile(r'^AllCoursesMobile_course-filter-mobile__'))
print(t)

方法二:Selenium模拟浏览器加载动态内容

Selenium可以模拟完整的浏览器渲染过程,获取JS加载后的页面内容:

from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 配置无头浏览器模式
chrome_options = Options()
chrome_options.add_argument('--headless=new')
driver = webdriver.Chrome(options=chrome_options)

driver.get('https://ineuron.ai/courses')
# 等待页面加载完成(可根据实际情况调整等待时长)
driver.implicitly_wait(10)

soup = bs(driver.page_source, 'html.parser')
t = soup.find('div', class_=re.compile(r'^AllCoursesMobile_course-filter-mobile__'))
print(t)

driver.quit()

方法三:抓取API接口直接获取数据

这是最高效的方式,通过浏览器开发者工具找到加载课程数据的接口:

  1. 打开浏览器开发者工具(F12),切换到「网络」标签。
  2. 刷新页面,筛选「XHR」或「Fetch」类型请求,找到返回课程列表的接口。
  3. 复制接口URL和请求参数,用requests直接请求获取JSON格式的结构化数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:40:40