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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:09:11