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

Scrapy-Playwright爬取丝芙兰页面返回null值问题求助

问题解决:丝芙兰产品标题爬取返回None的修复

核心问题

你代码里的内部CSS选择器语法错误,导致无法匹配到标题文本。另外,等待的元素可能不是产品列表的关键节点,可能导致页面未完全渲染就开始爬取。

修复步骤

1. 修正标题选择器

原代码中product.css('div a span css-12z2u5.eanm77i0::text')的错误在于:类名css-12z2u5前缺少.,正确的选择器可以简化为(外层已是产品容器,无需多余层级):

a span.css-12z2u5.eanm77i0::text

2. 调整页面等待逻辑

原代码等待的div#css-1322gsb并非产品列表容器,建议改为等待产品元素加载完成,确保所有产品渲染完毕:

PageMethod('wait_for_selector', 'div.css-1qe8tjm')

修改后的完整代码

import scrapy
from scrapy_playwright.page import PageMethod

class SephoraSkinCareSpider(scrapy.Spider):
    name = "sephora_skin_care"
    
    custom_settings = {
        'FEEDS':{
            'sephoradata.json':{'format':'json', 'overwrite':True}
        }
    }

    def start_requests(self):
        yield scrapy.Request(
            'https://www.sephora.com/shop/skincare', 
            meta=dict(
                playwright=True,
                playwright_include_page=True,
                playwright_page_methods=[
                    # 等待产品元素加载完成
                    PageMethod('wait_for_selector', 'div.css-1qe8tjm')
                ]
            )
        )

    async def parse(self, response):
        # 遍历每个产品容器
        for product in response.css('div.css-1qe8tjm'):
            yield {
                # 修正后的标题选择器
                'title': product.css('a span.css-12z2u5.eanm77i0::text').get()
            }

额外建议

  • 如果仍无法获取标题,可通过浏览器开发者工具(F12)重新定位元素,确认类名是否动态更新(丝芙兰部分类名可能会变化)。
  • 可增加页面等待时长,比如添加PageMethod('wait_for_timeout', 2000)(等待2秒),确保JavaScript完全渲染内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:42:28