返回第14章 第一条数据(1 / 2)太空争霸之我来自未来首页

4月6日夜里十点二十三分,星辰科技的抓取程序取得第一条联网数据。

拨号成功前,它已经忙音六次。楼上五金店老板每隔十分钟便踩一下地板,提醒马飞电话费正从押金里扣。半地下室的折叠床没地方展开,马飞只好坐在装手册的纸箱上,膝盖顶着桌沿。

页面来自一所高校的公开服务器,正文只有两百多字,介绍实验室研究方向。程序把标题、地址、更新时间和文本内容写入本地文件,耗时四十七秒。

马飞在日志第一行手写:

文档000001,来源公开,抓取成功。

接下来两个小时,程序又下载了六十三个页面。

第六十四个页面让它陷入循环。

站点日历给每一天生成一个新地址,程序不断沿“下一天”前进。即使页面内容几乎相同,地址也永远不会重复。电话计费表上的分钟数不停增加。

马飞发现时,已经浪费了二十七分钟。

他立刻断线。

电话清单上多出四元六角。那是他一天多的饭钱。楼上老板拿算盘算完,问日历上的字到底值不值这个价。

“不值。”马飞把钱从生活费信封里拿出来,“所以今晚不能再让它碰同一个坑。”

老板收了三元,剩下一元六角记在下个月库存维护里。他嘴上说不是赊账,只是怕马飞饿倒以后没人修程序。

未来成熟爬虫会有内容指纹、路径规则和站点级抓取预算。此刻,他只写了最基本的地址去重。知道缺什么不难,难的是在一台旧486上用尽可能少的内存补上。

他先为正文计算简短指纹,再规定每个站点单次最多抓取五十页。若连续五页的文本相似度过高,自动暂停该路径。所有暂停必须写入日志,下一次由人工判断是否恢复。

第二天,苏雨桐看完代码,指出另一个问题。

她来时带了两个食堂馒头,进门先摸水管,再看防水铁盒。确认备份没湿,她才把一个馒头放到马飞桌上。马飞正准备说昨天新增六十三页,她已经在日志里看见那二十七分钟循环。

“你只考虑自己会不会浪费电话费,没考虑对方服务器。”

“每次请求间隔十秒。”

“多个路径并行时不是十秒。对同一站点,你有三次请求只隔了两秒。”

早期网络带宽稀缺,一台不受控制的抓取程序足以让小型服务器明显变慢。规则尚未形成,不意味着伤害不会发生。

两人给程序加上站点级队列:同一服务器至少间隔二十秒,夜间访问也限制总量。请求标识中写明“XingchenCrawler/0.1”,附上联系邮箱和退出方式。

为验证限制真的生效,苏雨桐把三条不同路径同时放进队列,拿秒表守了二十分钟。程序有一次在第十九秒提前发出请求,她让马飞整段重写,不能靠多加一秒掩盖计时误差。凌晨十二点四十七分,连续三十次间隔都超过二十秒,她才在测试单上签字。

“有人会给一个爬虫写信?”马飞问。

“有人不想被抓时,总要找得到你。”

三天后,真的有人写来。

邮件来自某高校网络中心,只有一句话:

请停止访问 `/student/` 目录,其中含临时个人主页。

马飞立即把该路径加入禁止列表,删除已经取得的十一页内容,并回复说明处理结果。

第二封邮件在次日到达。

对方问:你们做的是什么?