数据抓取

抓取社交平台数据进行情感分析而不被封禁

封禁不仅会让你损失数据,还会使情感得分所依据的样本产生偏差。如何可持续地采集社交数据并衡量其中的缺口。

Chris Collins

Chris Collins

2026年9月6日 · 1 分钟阅读

收集社交数据时避免被封锁的理由,并不是大多数教程给出的那个。原因不在于封锁会让你损失数据量。而在于封锁不是随机发生的。

当平台开始对你进行限流时,它并不会均匀地丢弃样本。它会丢弃结果集中更深的页面、量更大的查询,以及你收集速度最快的那些时段。这些恰恰与你最关心的那些讨论相关,因为讨论量的激增同时也意味着你请求速率的激增。于是你丢失的样本不成比例地来自那些真正重要的时刻,而你事后计算出的情感分数会以一种你看不见的方向自信地出错。

这才是可持续收集的真正理由。不是吞吐量。是有效性。

从 API 开始

在做这一切之前,先看看平台官方提供了什么。如果存在某个 API,并且覆盖了你需要的字段、数据量和历史记录,就使用它。它稳定、被允许、不会悄悄改变你的覆盖范围,并且能从你的工程计划中直接去掉一整类问题。

现实情况是,API 只能覆盖问题的一部分。历史深度往往有限,速率上限常常低于严肃监测项目所需的水平,而许多最重要的社区根本没有 API。公开页面收集补上了剩下的部分,本文接下来讨论的正是这一部分。

表现得像读者,而不是爬虫

不被封锁,主要在于不产生任何人类都不可能产生的流量。这些技巧并不炫目,但确实有效。

**将请求速率控制在一个人可能达到的水平。**不要连续六个小时每秒发一次请求。把收集分散在一天之中,带有波动,而不是像节拍器一样均匀。

**限制每个出口的并发数。**一个全局并发限制如果不均匀地分布在一个小的地址池中,会让负载集中在少数几个地址上。要按地址限制,而不仅仅是总量限制。

**在第一个阻力信号出现时就退避。**一次验证挑战、一次变慢的响应、一个被截断的结果集。立即重试的冲动,正是把软限流变成硬封锁的原因。使用带抖动的指数退避,并设置断路器,在反复失败后彻底停止对某个目标的请求,详见速率限制与请求节流

**保持会话的连贯性。**一个分页的帖子如果用四个不同的地址去读取,这不是一个可信的阅读会话。在一次逻辑工作单元持续期间,应保持同一个会话。

**只收集公开内容。**登录后才能看到的内容是完全不同的法律和伦理问题,基于账号的收集正是项目真正陷入麻烦的地方。只收集公开页面、公开帖子、公开讨论串。

代理层的作用所在

对于情感分析工作来说,有两个特性尤为重要。

第一,来自单一地址的请求量是表明你不是真人读者的最明显信号。住宅代理将这些请求量分散到真实的、由 ISP 分配的地址上,这既能让单个地址的速率保持合理,又能让总吞吐量维持有用的水平。

第二是地理位置,这在情感分析工作中常被低估。社交平台会按地区提供不同的内容:热门话题、可见的回复,以及哪些帖子会被展示出来。如果一个全球情感数值只是根据某一个国家的视角计算出来的,那它其实只是那个国家的情感,被贴上了全球标签。如果你的产品拥有国际用户,收集就必须来自他们所在的市场。

使用 Shifter 网关时,这两点都体现在针对 p.shifter.io:443 的凭据中:

customer-USERNAME-country-jp-sid-topic-4417-ttl-600:PASSWORD

country-jp 设定了访问的地理视角,sid-topic-4417 让一个讨论串及其分页始终使用同一个出口,ttl-600 让该地址保持十分钟。如果不设置 sid,网关会按每次请求轮换地址,这对独立查询是对的,但对任何需要连续性的任务都是错的。更广泛的社交数据收集视角可参见社交媒体数据收集页面,账号层面的做法则见社交媒体代理

如果某个特定目标上的地址开始遭遇验证挑战,诊断与恢复流程见住宅代理 IP 被封时该怎么办

处理流程,按顺序排列

collect -> dedupe -> language detect -> filter -> score -> aggregate

每个阶段都有可能悄悄地破坏结果。

**先去重,再打分。**否则,同一条内容的转发、引用和截图会让一条声量很大的帖子变成一个”趋势”。使用固定规则,并将副本与原始记录保持关联,因为传播程度是与数量本身不同的一个信号。

**先检测语言,再打分。**用英语情感模型去处理多语言混合的文本不会明显地报错。它只会对自己没理解的文本给出自信满满的数字,而一旦你从多个市场收集数据,多语言语料就是常态。

**按相关性过滤,而不仅仅按关键词过滤。**如果一个品牌名同时也是一个常见词,就会把与你毫不相关的文本带进来。这是一个查询设计问题,下游模型无法修复它。

**在聚合时附上覆盖率指标。**每一个情感数值都应该附带同一时间窗口内的收集成功率。这样读者才能分辨,是观点变了,还是你能看到的内容变了。

情感打分是诚实的项目保持诚实的地方

有几个局限性值得对使用输出结果的人明确说明。

讽刺和反语依然难以可靠识别,而它们恰恰在人们抱怨最多的场合中占比过高。领域词汇会反转极性:在某些社区中,“sick”、“insane” 和 “unreal” 是褒义词。星级评分和评论文本常常相互矛盾,当它们不一致时,文本通常更接近真实情况。大量的中性分类本身并不是一个发现,它往往说明模型对无法解析的文本没有任何判断。

最有用的做法是报告变化,而不是绝对水平。0.62 的绝对情感分数对任何人都没有意义。而相较上个月、以相同方法、在可比覆盖率下计算出的变化,才有意义。这与适用于任何纵向网络面板的测量逻辑是一样的,值得完全照搬。

个人数据,以及止步之处

社交帖子是人写的,这使它与抓取价格数据截然不同。

收集公开帖子,并在采集时就剔除不需要的信息,而不是先存下来再承诺会克制。用户名、个人主页链接,以及文本中出现的任何联系方式,几乎从来都不是计算聚合情感所必需的。如果你的输出是一条趋势曲线,你的存储就不需要是一个个人数据库。

遵守每个平台声明的服务条款,保持数据量合理适度,并将需要身份验证才能访问的内容视为超出范围。总体的思路见面向 AI 数据收集的合乎伦理的住宅代理,而在这里更为重要,因为研究对象是人,而不是公司。

常见问题

住宅代理能阻止我被封锁吗?

它们能消除最常见的原因,也就是来自单一地址或可识别的数据中心网段的集中流量。但它们无法弥补一个人类不可能产生的请求速率。节奏控制和退避策略仍然承担了大部分工作。

情感分析实际需要多少数据?

对于趋势检测来说,比大多数团队想象的要少;对于细分分析来说,则比他们想象的要多。一个稳定的每周趋势,需要的是一致性,而不是数据量。而按市场、产品和话题细分情感,会使每个细分单元所需的样本量成倍增加。

如果我的产品是全球性的,是否应该从多个国家收集数据?

是的,并且应该把每个市场当作独立的序列来处理,之后再聚合。一个混合的全球数值会掩盖真正在变化的那个市场。

最常见的错误是什么?

把覆盖率的变化误报成情感的变化。把成功率与分数一起发布,几乎可以杜绝这类错误。

结论

可持续收集是一个采样要求,而不是吞吐量偏好。封锁会使样本偏向安静的时段,远离热闹的时段,这恰恰与情感分析项目本应衡量的目标相反。

在存在官方 API 的地方使用它,以读者的节奏发出请求,保持会话的连贯性,把请求量分散到你的用户实际所在市场的住宅地址上,并把覆盖率与分数一起发布。价格详见定价页面

准备好开始了吗?

试用 Shifter 住宅代理,205M+ 个 IP,195+ 个国家,低至 $0.10/GB。

立即开始