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

Scrapy爬虫无法跳转至下一页仅能抓取第一页内容,应如何排查解决?

问题排查

你的代码存在4个明确问题,按优先级排序如下:

  • 缩进错误:rules配置、parse方法都没有缩进在CasaSpider类内部,属于全局定义,爬虫运行时无法读取到这两个配置,规则不生效、自定义解析逻辑也不会被触发。
  • 错误重写内置方法:CrawlSpider自带parse方法用于执行链接提取规则,你重写该方法会直接导致规则完全失效,详情页链接不会被自动提取抓取。
  • 逻辑错位:你写的解析方法中,title、price是房源详情页的字段,而分页链接存在于列表页,两类逻辑混写导致:列表页请求进入解析方法时提取不到房源字段,同时详情页内不存在分页链接,自然无法跳转到下一页。
  • 细节错误:你先执行response.urljoin(next_page)再判断next_page is not None,如果选择器没有获取到链接,next_page为None时urljoin会直接抛出异常,打断爬虫运行。

修正后代码

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class CasaSpider(CrawlSpider):
    name = 'house'
    start_urls = ['https://www.casa.it/affitto/residenziale/napoli/montecalvario-avvocata-san-giuseppe-porto-pendino-mercato?sortType=date_desc']
    
    # rules缩进放入类内部,回调方法改为自定义的parse_item
    rules = [
        Rule(LinkExtractor(allow=(r'/immobili/.*'), deny=(r'/immagine-.*')), 
            callback='parse_item', follow = False),
    ]

    # 重写start_urls处理方法,优先处理分页再提取当前页详情链接
    def parse_start_url(self, response):
        next_page = response.css('a.paginator__page.tp-a--c.b-r--100.is-block.c-bg--w.tp-w--m.paginator__nav.next::attr(href)').get()
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(url=next_page, callback=self.parse_list_page)
        yield from super().parse_start_url(response)
    
    # 通用列表页处理方法
    def parse_list_page(self, response):
        next_page = response.css('a.paginator__page.tp-a--c.b-r--100.is-block.c-bg--w.tp-w--m.paginator__nav.next::attr(href)').get()
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(url=next_page, callback=self.parse_list_page)
        yield from super().parse(response)

    # 自定义详情页解析方法,禁止命名为parse
    def parse_item(self, response):
        yield {
            'title': response.xpath('//*[@id="__next"]/div[2]/div[2]/div[1]/div/h1/text()').get(),
            'price': response.xpath('//*[@id="__next"]/div[2]/div[2]/div[1]/div/ul/li[1]/text()').get()
        }

内容的提问来源于stack exchange,提问作者J. Malik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:18:03