如何在Scrapy Python 3.6.4中实现价格与卖家信息分组?
针对Scrapy实现价格与卖家信息分组的最佳方案
嘿,作为Scrapy新手能上手爬取购物页面已经超棒啦!针对你想实现价格与卖家信息一一分组的需求,我来给你梳理最实用的实现思路和代码示例~
核心思路:按卖家区块遍历提取
Google Shopping的卖家和价格信息是成对出现在同一个区块里的,所以我们不需要单独提取所有卖家再匹配所有价格,直接定位每个卖家的独立容器,在容器内提取对应信息,天然就完成了分组。
修改后的完整代码
import scrapy import re class ProductSpider(scrapy.Spider): name = 'product' start_urls = ['https://www.google.nl/shopping/product/13481271230046931540?client=opera&biw=1880&bih=1008&output=search&q=738678181690&oq=738678181690&prds=hsec:online,paur:ClkAsKraX-dNyyNw1dQNKCoMJnN5PTCcIkKQRK_FTu38WNkh-ASATIAsHY2pgV1a1wnYh_rnqfve8FuuCsHc8boLnMjv9EO2Q4wJS_AvrOL1pcn-GYMYHecz7BIZA...'] def parse(self, response): # 定位每个卖家的条目容器(如果页面结构更新,需要用Scrapy Shell调试调整选择器) seller_containers = response.css('div.sh-dlr__list-result') for container in seller_containers: # 提取卖家名称,用default处理缺失情况 seller_name = container.css('div.sh-dlr__seller-name span::text').get(default='未知卖家').strip() # 提取原始价格文本,再清洗出纯数字 raw_price = container.css('span.sh-dlr__price::text').get(default='0').strip() # 正则匹配数字(兼容整数和小数价格) clean_price = re.search(r'\d+\.?\d*', raw_price).group() if raw_price else '0' # 把分组好的信息yield出去,后续可以导出为JSON/CSV等格式 yield { '卖家名称': seller_name, '清洗后价格': clean_price, '原始价格文本': raw_price # 可选保留,方便核对 }
关键注意事项
- 调试选择器:Google Shopping的页面结构可能会变动,你可以用Scrapy Shell快速调试:
然后在Shell里用scrapy shell "你的目标URL"response.css("你的选择器").get()测试是否能正确提取内容,还可以用view(response)打开页面查看真实元素结构。 - 反爬处理:Google有反爬机制,建议在
settings.py里配置真实的浏览器User-Agent:USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' - 数据导出:爬取完成后,可以用命令导出分组好的数据:
导出的JSON文件里每一条就是一组卖家+价格的对应信息,非常方便后续处理。scrapy crawl product -o seller_prices.json
内容的提问来源于stack exchange,提问作者Rousblack
相关产品推荐
相关产品推荐

