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

使用Python+Scrapy爬取Flipkart无结果,请求代码错误排查

问题排查与修复方案

核心问题1:未配置爬虫初始请求地址

Scrapy爬虫默认读取start_urls列表作为初始请求来源,你的代码自定义了urls变量但未设置start_urls,导致爬虫没有发起任何初始请求,自然无爬取结果。

核心问题2:URL格式错误

你使用的URL中包含HTML转义字符&,实际请求时需要替换为原始的&,否则请求的地址格式无效,服务器返回的页面无法匹配你编写的CSS选择器。

翻页逻辑的潜在隐患

当前直接拼接页码生成下一页URL的方式,不仅容易出现格式错误,还可能触发网站反爬机制;同时类属性page_no和next_page在多线程爬取场景下会产生竞争问题,建议优先从页面DOM中提取下一页的真实链接。


修复后的代码

import scrapy

class flipkart_scrapy(scrapy.Spider):
    name = 'flipkart'
    # 修正URL格式并配置start_urls
    start_urls = ['https://www.flipkart.com/televisions/pr?sid=ckf,czl&p[0]=facets.brand%5B%5D=Mi&otracker=categorytree&p[1]=facets.serviceability%5B%5D=true&p[2]=facets.availability%5B%5D=Exclude+Out+of+Stock&otracker=nmenu_sub_TVs+%26+Appliances_0_Mi']
    base_url = start_urls[0]
    page_no = 2

    def parse(self, response):
        # 遍历商品节点提取数据
        for product in response.css("div._2kHMtA"):
            yield {
                'name': product.css("div._4rR01T::text").get(),
                'price': product.css('div._30jeq3._1_WHN1::text').get(),
                'rating': product.css("div._3LWZlK::text").get(),
            }

        # 生成下一页请求(推荐后续改为从页面提取下一页链接)
        next_page = f"{self.base_url}&page={self.page_no}"
        if next_page:
            yield response.follow(next_page, callback=self.parse)
            self.page_no += 1

额外优化建议

  1. 验证选择器有效性:使用scrapy shell 目标URL进入交互模式,测试CSS选择器是否能正确匹配页面元素,避免选择器失效导致无数据。
  2. 配置请求头:在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'。
  3. 处理动态内容:若页面存在JavaScript渲染的动态数据,需结合scrapy-splash或Playwright工具实现渲染爬取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:45:18