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

Python爬取Sephora网站数据存CSV仅输出表头无数据问题排查

问题根因
  • 返回200状态码仅代表服务器接收请求并返回了初始HTML文档,丝芙兰的商品列表完全靠前端JavaScript动态拉取数据渲染,requests拿到的源码只是个没有实际商品内容的页面框架,根本不存在class为s-card-container的商品卡片节点,因此lists变量是空列表,后续循环解析逻辑从头到尾没执行,自然写不进商品数据,文件最后只剩你预设的表头。
  • 代码里用的css-12vkztw、css-0是前端打包时生成的随机哈希类名,网站每次发版都可能变化,就算拿到渲染完成的页面,这类选择器稳定性极差,大概率选不到目标元素。
  • 现有代码缺少空值判断:如果循环中找不到标题或价格节点,直接调用.text会抛出AttributeError中断程序,你运行时没碰到这个报错,也能侧面证明循环根本没进入。
修复方法
  • 放弃直接用requests请求页面HTML的思路,二选一即可:要么抓浏览器加载商品时调用的后端接口,接口直接返回结构化JSON商品数据,解析效率和稳定性远高于爬取HTML;要么用playwright、selenium这类能模拟浏览器运行JS的工具,等页面把商品全部渲染完成后再提取源码解析。
  • 替换掉随机哈希类选择器,优先用元素上固定不变的属性定位,比如data-*自定义属性、aria-label属性、对应产品名/价格的语义化标签,不要用css-开头的随机类名。
  • 解析逻辑加空值判断,找不到对应元素时给默认空值,避免单个商品数据缺失导致整个爬取任务崩溃。另外文件编码改成utf-8-sig,可以避免Excel打开CSV时的乱码问题。
参考修复代码(基于playwright实现)
from csv import writer
from bs4 import BeautifulSoup
from playwright.sync_api import sync_playwright

url = "https://www.sephora.com/beauty/new-beauty-products"

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page(user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')
    page.goto(url, wait_until="networkidle")
    page.wait_for_selector('[data-comp="ProductCard"]')
    page_content = page.content()
    browser.close()

soup = BeautifulSoup(page_content, 'html.parser')
lists = soup.find_all('div', attrs={'data-comp': 'ProductCard'})

with open('Competition Pricing Sepho.csv', 'w+', encoding='utf-8-sig', newline='') as f:
    thewriter = writer(f)
    header = ['Title', 'Price']
    thewriter.writerow(header)

    for item in lists:
        title_node = item.find('span', attrs={'data-at': 'sku_item_name'})
        price_node = item.find('span', attrs={'data-at': 'sku_item_price_list'})
        title = title_node.text.strip() if title_node else ''
        price = price_node.text.strip() if price_node else ''
        if title or price:
            thewriter.writerow([title, price])

提示:首次使用playwright需要先执行playwright install命令安装对应浏览器内核,否则代码无法正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:21:25