使用Scrapy通过API抓取数据时Response.css返回空列表如何解决
问题原因
- 你发起请求的
searchapi.samsung.com是后端数据接口,返回格式为JSON,不存在HTML结构中的product-card-v2__item类节点。response.css()仅适用于解析HTML/XML类型的响应,无法作用于JSON数据,因此返回空列表。 - 三星官网前端页面的
product-card-v2__item类元素是前端拿到接口数据后,通过JS动态渲染生成的,直接抓取原页面的静态HTML同样不存在该节点,也会出现提取为空的问题。
解决方法
方案1:直接解析API返回的JSON数据(推荐,效率更高)
该接口已经直接返回了所有产品的结构化数据,不需要用CSS选择器解析,直接调用response.json()转换为Python字典后提取对应字段即可:
# 转换响应为JSON格式 product_data = response.json() # 遍历产品列表提取信息,字段路径可根据实际返回结构调整 for item in product_data["response"]["resultData"]["productList"]: # 提取产品名称 product_name = item.get("productName") # 提取产品售价 product_price = item.get("priceInfo", {}).get("finalPrice", {}).get("displayPrice") print(f"产品名:{product_name},售价:{product_price}")
方案2:渲染JS后解析原页面HTML
如果你需要直接爬取三星官网的列表页面,需要引入支持JS渲染的工具,等待页面动态渲染出product-card-v2__item节点后再提取:
- Scrapy项目可集成
scrapy-playwright插件,开启JS渲染后再调用CSS选择器 - 小规模抓取可以直接使用
selenium模拟浏览器访问,等页面加载完成后再提取元素
内容的提问来源于stack exchange,提问作者Bhavya Lodaya
相关产品推荐
相关产品推荐

