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

使用BeautifulSoup爬取列表详情时返回None的问题求助

问题分析与解决方案

常见原因及对应处理方式

1. 目标内容是JavaScript动态渲染的

requests.get()只能获取页面初始的静态HTML,很多现代网站会用JS动态加载商品列表这类内容,导致你要找的div.container--N6XSR根本不在静态响应里。

  • 解决办法:使用支持JS渲染的工具(如selenium或playwright)获取渲染后的页面源码,示例代码:
from selenium import webdriver
from bs4 import BeautifulSoup

# 初始化浏览器驱动(需提前安装对应浏览器的driver)
driver = webdriver.Chrome()
driver.get('https://www.morphmarket.com/us/c/reptiles/pythons/ball-pythons/1419690')
# 获取渲染后的页面源码
soup = BeautifulSoup(driver.page_source, 'html.parser')
# 后续查找逻辑不变(或改用稳定选择器)
snakes = soup.find("div", class_="container--N6XSR")
print(snakes)
# 关闭浏览器
driver.quit()

2. 动态生成的类名失效

你用的container--N6XSR这类带随机后缀的类名,大多是React、Vue等前端框架生成的动态类名,网站更新或刷新后会变化,导致匹配失败。

  • 解决办法:改用更稳定的选择器,比如:
    • 基于元素的data-*属性(开发者工具里查看元素的自定义属性)
    • 基于父元素的固定类名+层级关系
      示例:假设目标div的父元素有固定类名listing-grid,可以这样写:
# 用CSS选择器定位父元素下的目标子元素
snakes = soup.select_one('div.listing-grid > div:nth-child(1)')

3. 请求头缺失被识别为爬虫

直接用requests.get()发起请求,没有携带浏览器标识(User-Agent),可能被网站反爬机制拦截,返回的内容缺失目标元素。

  • 解决办法:添加请求头模拟正常浏览器请求:
from bs4 import BeautifulSoup
import requests

url = 'https://www.morphmarket.com/us/c/reptiles/pythons/ball-pythons/1419690'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
snakes = soup.find("div", class_="container--N6XSR")
print(snakes)

验证步骤

先打开目标页面,按F12打开开发者工具:

  • 切换到「网络」标签页,刷新页面,找到第一个文档请求(即你爬的URL),查看响应内容
  • 搜索container--N6XSR,如果搜不到,说明是动态加载;如果能搜到,检查类名是否正确或请求头是否缺失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:41:03