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

Scrapy爬虫仅爬取CSV中25条链接问题排查及全量爬取方法咨询

问题分析与解决方案

先帮你梳理下代码里导致只爬取25条数据的核心问题:

  • 起始URL初始化错误:你现在只从CSV里取了第3行(索引为2)的单个链接作为start_urls,根本没把71条链接都传入爬虫的起始请求队列。
  • 手动迭代链接的逻辑有bug:你用类变量n来控制下一个要爬的链接,但Scrapy是并发处理请求的,多个请求会同时修改这个共享的类变量,导致计数混乱——要么跳过大量链接,要么重复处理,这就是为什么只爬了25条就停了。

正确实现从CSV获取所有start_urls的方法

完全不需要手动维护迭代逻辑,Scrapy本身就会自动调度处理所有start_urls里的请求,按以下方式修改代码即可:

  1. 读取CSV时直接提取所有链接列的数据,转换成列表赋值给start_urls
  2. 删除类变量n、page_number以及parse方法里手动获取下一个链接的冗余逻辑

修改后的完整代码:

import pandas as pd
import scrapy

class HurriyetEmlakPage(scrapy.Spider):
    name = 'hurriyetspider'
    # 读取CSV并提取所有链接列的数据(假设链接在第2列,索引为1)
    df1 = pd.read_csv("C:/Users/Mert/Desktop/hurriyet/emlak/links.csv")
    # 过滤空链接,避免无效请求
    start_urls = [str(url) for url in df1.iloc[:, 1].tolist() if pd.notna(url)]
    
    custom_settings={
        'FEED_URI': "scrapped_pages.csv",
        'FEED_FORMAT': 'csv',
        # 可选:添加反爬延迟,避免被网站封禁
        'DOWNLOAD_DELAY': 1.5
    }

    def parse(self, response):
        il = response.xpath('//[contains(concat( " ", @class, " " ), concat( " ", "short-info-list", " " ))]//li[(((count(preceding-sibling::) + 1) = 1) and parent::*)]/text()').extract()
        ilce = response.xpath('//[contains(concat( " ", @class, " " ), concat( " ", "short-info-list", " " ))]//li[(((count(preceding-sibling::) + 1) = 2) and parent::*)]/text()').extract()
        mahalle = response.xpath('//[contains(concat( " ", @class, " " ), concat( " ", "short-info-list", " " ))]//li[(((count(preceding-sibling::) + 1) = 3) and parent::*)]/text()').extract()
        fiyat = response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "price", " " ))]/text()').extract()
        baslik = response.css('.txt::text').extract()
        deger = response.css('.adv-info-list div span , .txt+ span::text').extract()
        
        scraped_info = {
            'İl': il,
            'İlçe' : ilce,
            'Mahalle' : mahalle,
            'Fiyat' : fiyat,
            'İlan Bilgileri - Başlık': baslik,
            'İlan Bilgileri - Değer' : deger
        }
        yield scraped_info

额外提示

  • 如果CSV里存在空链接,代码里的if pd.notna(url)会自动过滤,避免发送无效请求
  • 可以根据网站反爬强度调整DOWNLOAD_DELAY的值,或者添加USER_AGENT伪装成浏览器请求
  • Scrapy默认并发处理8个请求,你可以在custom_settings里添加CONCURRENT_REQUESTS参数调整并发数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:22:35