服务端2月19日 14:28
Scrapy 请求去重是怎么判断重复的?## 直接答案
Scrapy 的请求去重由调度器调用 dupefilter 完成,默认实现是 `RFPDupeFilter`。它会为请求生成 fingerprint,通常由规范化后的 URL、请求方法、请求体组成;指纹已经出现过,就认为这个请求重复,不再入队。它解决的是“同一个请求不要重复抓”,不是“同一条业务数据不要重复入库”。所以列表页、详情页、翻页链接能靠它减少浪费,但商品 ID、文章 ID、用户 ID 的业务级去重,还应该放在 pipeline 或存储层。
```python
# settings.py
DUPEFILTER_CLASS = "scrapy.dupefilte...服务端2月19日 14:28
Scrapy 如何处理 Cookies 和多会话登录?## 直接答案
Scrapy 默认会通过 CookiesMiddleware 维护 cookie:同一个会话里的响应 Set-Cookie 会被保存,后续请求会自动带上。登录类爬虫通常用 `FormRequest` 先提交账号密码,再把登录后的请求接在回调里;如果要同时爬多个账号、多个店铺或多个地区,就用 `meta['cookiejar']` 隔离会话。真正容易出错的地方不是“能不能带 cookie”,而是 cookie 什么时候该让 Scrapy 管、什么时候该你自己管。手动在 `headers` 里塞 `Cookie` 看起来快,但会绕开 Scrapy 的 cookie 合并逻辑...服务端2月19日 14:28
Scrapy settings.py 里哪些配置最该优先调整?Scrapy 的 `settings.py` 决定爬虫速度、稳定性、反爬风险和数据质量。新项目最该优先调整并发、延迟、超时、重试、请求头、robots、日志、pipeline、middleware 和环境覆盖方式。不要一开始就追求最快,先让目标站、代理池、数据库和自己机器都扛得住。速度可以逐步加,封禁和脏数据一旦出现,排查成本会高很多。
## 基础配置先保持清楚
`BOT_NAME`、`SPIDER_MODULES`、`NEWSPIDER_MODULE` 通常由项目生成,但要和部署项目名一致。Scrapyd 日志、任务和发布记录都会反复出现这些名字,命名混乱会让排查变难。`ROBOT...服务端2月19日 14:28
Scrapy 爬虫运行中如何监控和定位问题?Scrapy 监控要回答三个问题:爬虫是否还活着,数据产出是否正常,异常卡在哪一步。只看进程状态不够,因为进程可能还在跑,却一直拿到 403、验证码、空页面或登录页。生产环境至少要看请求量、状态码、失败率、item 数、入库数、运行耗时、队列积压和内存占用。指标少一点没关系,但每个指标都要能指导动作。
## 先用 Stats 建基础盘
Scrapy 自带 Stats Collector,会记录请求、响应、重试、异常和 item 数。最小成本的做法是在爬虫结束时把关键指标写进日志或监控系统。`item_scraped_count` 看产出,`downloader/response_st...服务端2月19日 14:28
Scrapy 项目上线后如何部署和管理爬虫?Scrapy 上线不要只把代码丢到服务器然后执行 `scrapy crawl`。更稳的做法是先固定依赖、配置、日志和启动入口,再交给 Scrapyd、systemd、Supervisor 或 Docker 管理。小项目用 Scrapyd 发布和调度很快,团队项目更适合 Docker 加 CI/CD;如果任务很多,还要补上队列、监控、告警和回滚。部署的重点不是工具越多越好,而是出问题时能定位、能停止、能恢复。
## 上线前先固定运行环境
先确认项目能用同一套命令复现运行结果。依赖写进 `requirements.txt` 或 `pyproject.toml`,生产参数放环境变量,不要在...计算机基础2月19日 14:42
TCP 为什么需要三次握手?两次或四次不行吗?TCP 三次握手的重点不是“发了三次包”,而是让双方确认三件事:对方能收、对方能发、双方的初始序列号都同步了。客户端先发 SYN,带上自己的 seq=x;服务端回 SYN+ACK,确认 x 并给出 seq=y;客户端再回 ACK,确认 y。到这一步,双方才有足够信息进入 ESTABLISHED,后续字节流才能可靠编号和确认。
## 三次握手的过程怎么走?
文字时序图可以这样看:客户端说“我要连,seq=x”;服务端说“收到 x,我这边 seq=y”;客户端再说“收到 y”。第一次后客户端进入 SYN_SENT,第二次后服务端进入 SYN_RCVD,第三次到达后双方进入 ESTABLI...计算机基础2月19日 14:45
TCP 首部有哪些关键字段?它们分别解决什么问题?TCP 首部不是一串要死记的字段,而是 TCP 可靠传输的控制面板。端口决定数据交给哪个进程,序列号和确认号让字节流不乱,标志位表达连接状态,窗口、校验和、选项分别处理流量控制、差错检测和能力协商。最小首部 20 字节,带选项最多 60 字节;抓包时真正有用的不是背出字段名,而是看这些字段是否在按预期变化。
## TCP 首部整体长什么样?
文字图示可以这样记:源端口和目的端口各 16 位,后面是 32 位序列号、32 位确认号,再往后是数据偏移、保留位、控制标志、窗口大小、校验和、紧急指针,最后才是可变长选项和数据。数据偏移说明首部在哪里结束,因为 MSS、窗口扩大、时间戳、SAC...服务端2月19日 15:03
MQTT 是什么?它的核心特点和工作原理是什么?MQTT 是一种基于 TCP 的轻量级消息协议,最常见于物联网设备、移动推送和实时状态同步。它的核心不是“像 HTTP 一样请求接口”,而是通过 Broker 做发布/订阅:设备把消息发布到主题,其他客户端订阅主题后由 Broker 推送消息。这个模式让设备不必知道彼此地址,也能在弱网、低带宽和大量连接场景下稳定通信。
## MQTT 为什么适合物联网?
第一个特点是轻量。MQTT 固定头部最小只有 2 字节,比 HTTP 一大串 header 更省流量。对电池供电设备来说,少发一点数据、少建立几次连接,都会影响续航。它还通过 Keep Alive 维持长连接,Broker 可以主动...服务端2月19日 15:03
MQTT QoS 0、1、2 有什么区别?实际项目该怎么选?MQTT QoS 解决的是“消息交付可靠性和成本怎么平衡”的问题。QoS 0 是最多一次,速度最快但可能丢;QoS 1 是至少一次,能保证到达但可能重复;QoS 2 是恰好一次,流程最完整但开销也最大。实际项目里不是 QoS 越高越好,而是要看消息丢失、重复和延迟哪个代价更高。
## 三种 QoS 的核心区别
QoS 0 只有一条 PUBLISH,没有确认报文。发布者把消息发出去就算完成,网络抖动、客户端断开、Broker 繁忙都可能导致消息丢失。它适合高频遥测,比如温度、湿度、定位点,因为下一条数据很快会覆盖上一条。用 QoS 0 的好处是吞吐高、延迟低、设备耗电少。
QoS 1...服务端2月19日 15:04
MQTT 发布订阅是怎么工作的?主题、通配符和 Broker 怎么配合?MQTT 的发布/订阅模式可以理解成“发消息的人不找具体接收者,只把消息交给主题;想要消息的人订阅主题”。发布者只负责把 payload 发到 topic,订阅者只声明自己关心哪些 topic,中间的 Broker 负责匹配和分发。这个设计把生产者和消费者解耦了,所以很适合设备多、上下线频繁、消息一对多的物联网场景。
## 一条消息是怎么走的?
流程并不复杂。订阅者先连接 Broker,然后发送 SUBSCRIBE,例如订阅 `home/+/temperature`。传感器作为发布者把温度发到 `home/livingroom/temperature`,Broker 发现这个主题匹配...