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
相关产品推荐
相关产品推荐

