You need to enable JavaScript to run this app. Python使用CSS选择器爬取商品标题返回NoneType问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Python使用CSS选择器爬取商品标题返回NoneType问题求助

问题原因

  • 你爬取的Weedmaps平台属于前端动态渲染站点,你用requests发起请求拿到的仅为未执行JS的初始静态HTML源码,所有商品相关的DOM元素都是后续JS异步请求数据后渲染生成的,自然找不到对应元素返回None。
  • 你所使用的CSS选择器中包含了前端框架自动生成的带随机哈希后缀的类名(比如styles__NameRatingWrap-j5iyiv-15、content-wrapper__ContentWrapper-ljfebg-0中的随机串),这类类名会随站点版本更新随时变动,完全不适合作为定位元素的依据。
  • Weedmaps配置了Cloudflare反爬机制,普通requests请求大概率会被拦截返回验证页面,响应内容本身就不是正常的页面源码。

可行解决方案

方案1:直接调用站点公开API(最推荐)

你可以在浏览器开发者工具的「网络」面板筛选XHR/Fetch请求,就能找到官方的搜索、商品详情接口,返回结构是标准JSON,不需要解析DOM,开发效率和稳定性都高很多:

  • 搜索商品接口返回的数据直接包含商品标题、链接、价格等所有你需要的字段,无需二次请求详情页
  • 接口请求只需要补充必要的请求头、参数即可,不用处理页面渲染逻辑

方案2:使用无头浏览器渲染页面

如果你必须通过解析HTML获取数据,可以使用Selenium、Playwright这类支持JS渲染的工具,等待页面元素加载完成后再提取内容:
示例参考(Playwright):

from playwright.sync_api import sync_playwright

def product_data(url):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        page.goto(url)
        # 等待h1元素加载完成再提取,定位优先用语义化标签、固定属性,不要用带哈希的类名
        title = page.locator("h1").first.inner_text()
        product = {'Title': title}
        browser.close()
        return product

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 04:27:04