Scrapy爬取Amazon.es生成空白CSV文件问题求助(附代码)
排查Scrapy爬取Amazon.es生成空CSV的问题
嘿,我来帮你捋捋为啥爬Amazon.es生成的CSV是空的!从你给出的代码和场景来看,有几个很容易踩的坑,咱们一个个排查:
1. 域名配置拼写错误
你代码里写的是allowed_domain,但Scrapy要求的是复数形式allowed_domains(少了个s)!这个错误会直接导致爬虫被限制访问目标站点,连初始页面都爬不到,自然没数据输出。
2. 起始URL不完整
你给出的start_urls里的链接是截断的(末尾是&r...),不完整的URL会让爬虫请求失败或者跳转到错误页面。一定要把URL补全,直接复制浏览器里能正常打开的亚马逊搜索结果页链接就行。
3. CrawlSpider缺少爬取规则
你继承了CrawlSpider,但完全没定义Rule规则,也没有处理起始页面的解析逻辑!CrawlSpider依赖规则来决定爬哪些链接、用哪个函数解析页面,要是没规则,爬虫只会访问起始URL,但不会提取任何数据。
4. 没有Item数据提取逻辑
虽然你导入了MercadoItem,但代码里完全没有实例化Item、填充字段并yield的逻辑。就算爬虫爬到了页面,也不知道要提取什么数据,自然不会生成任何内容到CSV里。
5. 亚马逊的反爬拦截
Amazon有很强的反爬机制,直接用Scrapy默认配置请求,大概率会被拦截(返回空页面或者验证码)。可以先做基础的反爬规避:
- 在
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' - 添加下载延迟,避免请求太频繁:
DOWNLOAD_DELAY = 2
修正后的示例代码
给你改了关键部分的代码参考,你可以根据自己的需求调整选择器:
# -*- coding: utf-8 -*- import scrapy from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor from scrapy.exceptions import CloseSpider from mercado.items import MercadoItem class MercadoSpider(CrawlSpider): name = 'mercado' item_count = 0 # 修正复数形式的域名配置 allowed_domains = ['www.amazon.es'] # 替换成完整的有效搜索结果URL start_urls = ['https://www.amazon.es/s/ref=sr_st_price-asc-rank?keywords=febi+bilstein&rh=n%3A1390085031&sort=price-asc-rank'] rules = ( # 提取商品详情页链接,指定解析函数 Rule(LinkExtractor(restrict_xpaths='//a[@class="a-link-normal s-no-outline"]'), callback='parse_item', follow=False), # 可选:添加下一页爬取规则 Rule(LinkExtractor(restrict_xpaths='//a[@class="s-pagination-item s-pagination-next"]'), follow=True), ) def parse_item(self, response): item = MercadoItem() # 根据亚马逊页面结构调整XPath,提取商品名称和价格 item['title'] = response.xpath('//span[@id="productTitle"]/text()').get(default='').strip() item['price'] = response.xpath('//span[@class="a-price-whole"]/text()').get(default='').strip() self.item_count += 1 # 可选:爬取指定数量后停止爬虫 if self.item_count >= 10: raise CloseSpider('已爬取足够数量的商品') yield item
调试小技巧
- 运行爬虫时加上日志记录:
scrapy crawl mercado --logfile scrapy.log,查看日志里有没有访问被拒绝、选择器匹配失败的错误信息。 - 用
scrapy shell "你的完整URL"测试页面,看看返回的内容是否正常,手动验证XPath能不能提取到数据。
内容的提问来源于stack exchange,提问作者Luis Miguel
相关产品推荐
相关产品推荐

