你公司里一定有人在手工填写一张表格。也许上面记的是竞争对手的价格,也许记录的是哪些商品已经缺货。每个周一,这个人要打开二十个浏览器标签页,一个一个地把数字抄过来。
这个办法能用,但速度慢,而且很容易出错。到了周三,其中一半数字已经过时,却没有人察觉。负责抄录的那个人,手头通常有重要得多的事情要做。
其实有更简单的做法。程序可以替你打开这些页面,提取你指定的字段,再保存成一个文件。明天它会照做一遍,下周也一样,完全不需要有人提醒。表格会自己填满,周一上午的时间也就省了回来。
Bright Data 的网页爬虫工具正是为这类工作而设计的。访问页面、提取内容、重复执行,这些都由它完成,不需要任何人在周一早上开二十个标签页。本文会讲清楚这类自动化是怎么运作的,并且默认你从未用过它。
网页爬虫到底在做什么
可以把它想象成一位极有耐心的助理。你给他一份网址清单,告诉他每个页面上要记录哪些内容。他会逐个打开页面,记下商品名称、价格和库存状态,然后继续下一个。这份工作毫无趣味可言,而这恰恰是重点。
他不会觉得枯燥,不会把数字打错,也不会因为周五下午就跳过某一行。程序接手了访问和抄录的活儿,而且完全不介意重复。
程序读取页面的方式和你不一样。它沿着页面底层结构里的路径去找,大致相当于“往下第三个方框,在商品面板里面”。这套路径一直有效,直到有人改动了页面布局。
这类工作会涉及两个词。爬虫负责发现页面,通常是顺着链接一个接一个地找。抓取工具负责把每个页面上的细节取下来。多数工具两件事都做,所以这个区分在实际使用中意义不大。
它属于一个更大的框架
你要搭建的东西有个更早的名字。IBM 把这种模式称为 ETL,也就是提取(extract)、转换(transform)、加载(load)的缩写。思路其实很简单。把数据从它所在的地方取出来,整理成统一的格式,再存到能用得上的地方。网页在这张图里只是一种普通的数据源,这套模式本身并不新鲜。
这一点之所以重要,只有一个原因:数据到手并不等于工作结束。价格带着货币符号,日期有三种写法,同一件商品在两个网站上的名称也不一样。
跳过清洗环节并不能省事,只是把事情推给之后打开文件的那个人。等到他发现总数不对劲时,原因早已埋在几个月的记录里了。
清洗本身就是工作,不是事后补救。
完整流程
不管你用的是什么界面,底下的步骤都很短,而且始终一致:
- 你给它一个起点,比如一份网址清单。
- 它逐个抓取页面,方式和你的浏览器差不多。
- 它挑出你指定的字段,其余内容一概忽略。
- 它清洗这些数值,让它们格式统一。
- 它把结果写进文件或者数据库。
- 它按你设定的时间表,重复整个过程。
真正的价值在最后一步。跑一次只能得到一张快照,用处有限。反复运行则能积累出变化的记录,这是价值高得多的东西。一次运行是一个事实,一年的运行就是一条趋势。这个差别,正是整件事值得自动化的全部理由。
团队最常采集的内容
- 竞争对手的价格,以及对方对你调价的反应速度。
- 库存水平,它往往比销售数字更早透露需求变化。
- 客户评价,按趋势来看,而不是一条一条地读。
- 你所在市场里的新品发布和商品目录变动。
这几项有三个共同点。每一项都是公开信息,每一项都在持续变化,而且都不够醒目,不会偶然被人注意到。如果一件事三条都占,那它几乎肯定值得自动化。
决定运行频率
微软关于数据管道的文档介绍了两种启动任务的方式。第一种按时钟运行,可以是每天早上九点,也可以是每周一和周四。时间提前定好,不会变动。第二种则由事件触发。
事件触发是在某件特定的事情发生时启动,而不是到点就跑。对新手来说,按时间表运行几乎总是更合适的选择。挑一个仍能回答你问题的最慢频率,不要更快。
如果价格每周才变一次,每小时查一遍毫无意义。这样既花钱,又毫无理由地给别人的网站增加负担。采集得慢一些,通常是更专业的做法。
必须遵守的规则
大多数网站会在根目录放一个叫 robots.txt 的小文件,说明自动访问者可以看哪些内容。这不是一种非正式的客套。它已经在2022 年 9 月成为正式的互联网标准,对爬虫应当如何处理给出了明确规定。这些规则涵盖重定向、缓存和错误处理。
其中有一个细节值得注意。有时服务器出故障,robots.txt 根本无法读取。这种情况下,守规矩的爬虫会默认一切都不允许访问,而大多数自制脚本的做法正好相反。
速度同样重要。爬虫如果把一个小网站压得喋不过气,会给运营方带来实实在在的麻烦。而且通常自己也会被封掉,而在两次请求之间稍作停顿,代价其实很小。这里讲礼貌也是为自己着想,因为你还要继续依赖这些网站。
这套方法扛得住规模吗
扛得住,而且有一个记录完整的案例。两位麻省理工学院的经济学家在 2008 年启动了“十亿价格项目”,带着一个问题:从零售网站上取得的价格,能不能像官方调查那样衡量通货膨胀?
他们发表在《经济展望杂志》上的论文给出了规模数据。到 2010 年,他们每天从 50 个国家的 300 多家零售商处采集五百万条价格。论文显示,这些线上价格指数与多数国家的官方消费价格指数走势高度吻合。整个过程中,没有一位研究人员需要跑到实体店里去。
他们还用同一批数据研究价格变动的速度,这对数据质量是相当苛刻的考验。既然公开的网络数据能支撑多年的经济学研究,那么盯住几百件商品要容易得多。
开始之前先确认几件事
- 把需求说具体。“竞争对手的价格”太含糊,“这 200 款商品每天的价格和库存”才算清楚。
- 想清楚数据存在哪里。一开始用表格没问题,但要积累几个月的历史,数据库更合适。
- 先拿少量页面做测试,因为早期发现的错误成本很低,拖到后期则很麻烦。
- 明确这件事归谁负责,因为没有负责人的采集任务,总会在无声无息中停掉。
把这件事做得合规
几条原则就能把这件事理顺。只采集本来就公开的信息,也就是访客不用登录就能看到的内容。尊重你访问的每一个网站的服务条款,每次都要如此,而不是方便的时候才讲。这些都不难做到。
没有正当的法律依据,就不要收集个人信息,因为数据保护规定同样适用于自动化采集。采集到的数据跨境之前,先把相关规则弄清楚。
写在最后
自动化采集算不上什么高明的技巧。它不过是让程序把枯燥的活儿做得比人更稳,然后下周再自动做一遍。好处不只是省下来的那些工时,更大的收获反而更安静。
原本麻烦的问题,悄悄变得容易回答。没有人会每天手工核对 500 个价格,所以根本没人提这个问题。一旦交给机器去核对,那些本来就存在的规律就浮现出来了。
先从你现在用手工核对的某一件事入手。把这一件事自动化,让它跑满一个月,再看看这段历史告诉了你什么。这就足以判断,剩下的事情值不值得做。

