scrapy中callback用于指定响应处理函数,需在request中显式传入函数名(不带括号);函数须定义在spider类内且非私有;可通过meta字典或partial传递额外参数;避免加括号调用、拼写错误及遗漏callback声明。

在Scrapy中定义callback回调函数,是为了让爬虫在下载完某个URL后,自动把响应对象交给指定函数处理,而不是默认交给parse方法。不写对callback,请求发出去就石沉大海,解析逻辑根本不会触发。
基础callback函数定义方式
第一步:在scrapy.Request中显式传入callback参数,值为函数名(不带括号)。
第二步:定义一个普通函数,接收response参数,函数体里写XPath或CSS提取逻辑。
这一步操作起来很简单,直接把文件拖进去就行。但注意:函数必须定义在Spider类内部,且不能是私有方法(即不能以__开头),否则Scrapy无法访问。
callback函数如何接收额外参数
方法一:使用functools.partial预绑定参数
from functools import partial
request = scrapy.Request(url, callback=partial(self.parse_item, category="book"))
方法二:用Request的meta字典传参(更常用)
request = scrapy.Request(url, callback=self.parse_item, meta={"category": "book", "page": 1})
在parse_item中通过response.meta获取:【response.meta["category"]必须确保键存在,否则会抛KeyError】
避免callback丢失的三个关键点
① 不要给callback赋值为self.parse_item()——加了括号就变成立即执行,返回None,Scrapy会报错“callback must be a callable”。
② 如果callback函数名拼错,比如写成self.pase_item,Scrapy不会报语法错误,但请求发出后静默失败,日志里只显示“Ignoring response”,极难排查。
③ 在start_requests中手动构造Request时,【必须显式写callback=xxx,不能依赖默认parse】,否则所有自定义请求都走parse,逻辑混乱。











