采集网页文字内容片断

无论采用什么技术编写网页代码,加载到浏览器上时都变成了HTML文档格式。在HTML文档中,文字内容都用各种HTML标签括起来。网页文字内容采集器MetaSeeker可以参照HTML标签或者参照标志性内容精确地将内容按照字段分别采集下来并存储到整理箱(专有名词,形象地表示结构化存储采集内容的容器)中。与精确采集相反,采集“内容片断”是指跨多个HTML标签,将这个片断中的文字内容采集下来。这种工作方式的一个极端案例是用普通网络爬虫建设基于全文索引的搜索引擎,将整个网页的文字内容一股脑采集下来。

既然有MetaSeeker的准确定位采集能力,还有必要采集文字内容片断吗?如果这个答案是肯定的,还有一个问题是:采集网页内容片断的粒度应该怎样确定?实际上这些问题没有确切答案,当MetaSeeker用于商业目的时,用户一般会从运营维护成本角度进行权衡并回答上述问题。

一般来说,网页内容采集精度要求越高,采集规则越复杂,那么受目标网页结构变化的影响越大,虽然MetaSeeker采用包括FreeFormat技术在内的诸多专利技术设法提高采集规则的适应性,但是,目标网页的结构改变却不是网页内容采集者能够控制的。即便MetaSeeker的特有的低成本的采集规则修改功能可以帮助用户迅速调整采集规则,频繁改动或多或少地会增加运营成本。此时,就应该权衡一下是否总是需要最精确的采集规则。

个别客户采用MetaSeeker的自定义功能编写XPath和XSLT规则,例如,从一个HTML TEXT节点的字符串中用substring-after等函数将子串采集出来,可算是极其精确的采集了。这种采集规则受网页结构变化的影响最大。相反,如果将跨多个HTML标签的内容片断采集到一个信息属性中,精度降低,适应性提高。

采集网页文字内容不是信息处理过程的最后一站,例如,建立舆情监测系统,需要将采集结果入库,紧接着进行去噪、去重、分词、索引、分类、统计等等诸多处理过程。在这个处理过程链条上可以找到很多合适位置对采集到的HTML内容片断进行二次抽取和分割。

下面我们将用一个例子讲解采集网页文字内容片断的基本方法,自定义XPath或者XSLT规则也属于这个范畴,将在其它教程中详细解释。

注意:连续加载两个使用相同样本页面的信息结构会失败,观察MetaStudio底端的状态条,能够看到MetaStudio加载过程停顿了,状态条上没有显示“完成”字样。这是MetaStudio的bug,要避免,或者重启MetaStudio后再加载同一个信息结构。



1 加载以前定义的信息结构

加载《采集当当网百货价格》一文定义的主题名demo_DD_list_1信息结构,经常失败。


图1

图1显示加载状态,并分析失败原因:

  1. 当当网上多数商品显示市场价和当当价两个价格
  2. 选作样例的第一个商品没有市场价,只有一个价格范围
  3. 加载信息结构的时候,要根据定位规则在网页上定位DOM节点,在这个案例中,关于价格的节点定位失败。怎样加载信息结构参见《网页采集规则失效怎么办》

当遇到这种情况,如果仅仅按照《网页采集规则失效怎么办》一文介绍的方法修改信息结构无济于事,因为当当网展示的商品不断变化,排在第一个作为样例的商品会变化,以前成功地定义了demo_DD_list_1说明当时样例商品是正常的。另外,在这种情况下,MetaStudio加载信息结构失效不一定引起采集过程中DataScraper失败,所以,不一定非要采取措施修正这个问题,一般来说,只有看到DataScraper上报错误日志时再采取行动。DataScraper一般会上报:Suitable data schema cannot be found



2 价格信息采集到一个信息属性中


图2

如图2,我们重新定义了采集规则,主题名改成 demo_DD_list_4,说明如下:

  1. 选择商品列表中第一个商品作为样例
  2. 为信息属性商品名商品网页做数据映射和FreeFormat映射,详细描述参见《采集京东商城商品价格》
  3. 为信息属性商品价格只做FreeFormat映射
  4. 上步完成后,看到该信息属性的block特性被自动勾选了,缺省含义是:从具有FreeFormat标志@class='price 的DIV节点所代表的HTML片断中将所有文字内容采集下来。
  5. 为了采集多实例,进行FreeFormat映射,详细参见《采集京东商城商品价格》,也可以采用样例复制品方法采集多实例,参见《采集当当网百货价格》
  6. 为了精确定位,进行FreeFormat映射,详细解释参见《精确采集新蛋网商品价格》


图3

如图3,MetaStudio自动设置的block特性是可以修改的,步骤如下:

  1. 选中信息属性,双击鼠标左键,会弹出一个编辑信息属性的特性的窗口
  2. 可以看到缺省的采集网页文字内容片断的规则:采用了特定过滤器,而且只采集HTML片断中的文本内容
  3. 采集网页文字内容片断的规则可以手工修改,怎样使用XPath过滤器XSLT过滤器可以参考《自定义采集规则的功能特性》


3 怎样处理采集结果


图4

图4是MetaStudio上输出的采集结果片断,可以看到:

  • 商品价格显示成价格区间的采集结果
  • 商品价格显示成当当价和市场价的采集结果

每个商品的这些价格信息都放在一个信息属性中,在处理采集结果时,需要根据存放规律将价格分割并抽取出来,例如,采用Java的正则表达式可以很容易将两个价格或者价格区间分割开。