TAG
调试
共 5 篇
raise NotConfigured 带不带消息,决定了它是一条 WARNING 还是零日志——而管道就是这么没的
MiddlewareManager 里那句 if e.args 决定一切:带消息的 NotConfigured 打一条 WARNING,不带的一行日志都没有。实测一个裸 raise NotConfigured 的管道——item 抓到 3 条,落库 0 条,退出码 0,日志零行。
源码剖析Scrapy工程化6 min
五个骗过我的假信号:测试 12 全过、脚本 0 报错、检查 0 命中,然后结论全是反的
八秒跑完九条调用、十二个用例全过、正则扫描零命中——五次「看起来正常」的结果,结论全都是反的。附上把它们捞回来的四个信号。
工程实践工程化调试17 min
自定义下载处理器炸了,Scrapy 只报「Unsupported URL scheme」——而且这辈子都不会再试一次
DownloadHandlers 把加载失败包装成 NotSupported,原始异常被塞进「不支持的协议」这句话里;失败结果还会永久缓存,一次失败之后同一个 scheme 的所有请求都直接返回缓存,构造函数再也不会被调用第二次。
源码剖析Scrapy工程化9 min
settings.set() 可能什么都没做:优先级低于现值时静默丢弃,返回值还是 None
Scrapy 的 Settings 按优先级写入,低于当前优先级的写入会被直接丢掉——不抛异常、不打告警,set() 的返回值和成功时一模一样。spider 的 custom_settings 会挡住后来所有默认优先级的修改。
源码剖析Scrapy工程化6 min
Scrapy 2.17 里 start_requests() 已经没人调用了:0 个请求、0 个告警、退出码 0
升到 2.13 之后,只定义 start_requests() 的爬虫会产出 0 个请求。不报错、不告警、finish_reason 还是 finished。这是我自己在写另一篇文章时踩进去的。
源码剖析Scrapy工程化6 min