360doc文档内容的拷贝和粘贴

本文重点说明怎样抓取HTML网页的片断,也就是说,不只是文字内容,还需要保留HTML标签,相当于将一段HTML文档完整切下来。本文使用了一个实际案例,所以,在讲解MetaSeeker操作方法之前先费点笔墨讲讲项目的来龙去脉。

目前互联网上充斥着大量垃圾信息,垃圾信息的范畴很广,广义上讲,非法盗版、为商业推广目的的热文转载等等都算作垃圾信息,参见《什么是社会性媒体》中关于垃圾信息的解释。这就导致互联网内容重复率极高,不利于搜索引擎将本源网站呈现给用户(根据我的体验Google在识别原创方面做得最好),更严重的是触犯了版权法等相关法规。由于MetaSeeker采用了多项业界领先的发明专利,具有极强的渗透能力,对于普通搜索引擎来说是“暗网”的部分,MetaSeeker仍然能够成功采集信息,所以,迅速被机关、企业、法律等社会团体所采用,加上GooSeeker开发的基于Shingling算法的重复识别和盗版统计系统,已经被某部门的某反盗版调查项目所采用,用于网络调查取证。

在这个应用领域,对网络信息采集的需求很复杂多样,因为该领域自身的工作流程就比较复杂,在不同工作阶段,对网络信息的需求不一样,例如,数量和范围等方面。本文讲解的例子仅仅是本项目的早期调研阶段的很小一部分,可以从某个网站上将需要的内容拷贝下来,粘贴到研究文档中。

360doc同其他大量采用AJAX技术的网站相比,其网页抓取并不困难,普通网络爬虫都可以实现,但是,作为调研工作者,如果想将360doc某个网页的文档内容拷贝并粘贴到调研报告(例如,Microsoft Word文档)中却不容易,网站有些文章提示

   点击正文左上角的“我也要收藏”可将文章保存到......

这可能并不是一种防拷贝手段,而可能是一种发展社区的强制手段,但是给普通的网络调查工作者造成不变。

下面我们将讲解一种便捷方法,用MetaStudio将目标网页转换成XML文档,再用Firefox打开,避开禁止拷贝和粘贴限制。本文仅为讲解MetaSeeker使用方法而写,在这个实际项目中有专用浏览器插件做文档内容的拷贝和粘贴,要比本文的方法简便很多。

注释1:本文并不是入门教程,所以对屏幕截图讲解得比较粗略,如果对一些术语不太理解,建议按顺序阅读《MetaSeeker速成手册》

注释2:目标网站的网页结构可能会发生改变,有可能导致本文讲解的抓取规则失效,请参照《修改失效规则》对其修改和调整。



1 定义抓取规则

需要有抓取规则才能执行抓取任务,网页内容抓取规则是一些脚本程序,阅读和修改起来十分麻烦,MetaSeeker用户不必直接面对抓取规则,只需操作抓取规则定义和管理工具MetaStudio的图形界面(GUI),十分直观且操作简便,而抓取规则由MetaStudio自动生成。另外,MetaSeeker是一个协同式云计算架构,如果别人定义的抓取规则开放了阅读权限,就可以用MetaStudio查看和使用它,或者参考它。

下面我们分两种情况讲解怎样抓取360doc上的文档内容:

  • 情况1:重新定义抓取规则
  • 情况2:使用别人的抓取规则

您只需要使用其中任何一种。

MetaStudio根据什么生成抓取规则呢?这需要介绍一个MetaSeeker专用的概念——信息结构,是一个数据结构,用于描述被抓取的网页内容的结构,MetaStudio用它生成抓取网页内容的规则。用户通过图形界面操作MetaStudio的结果就是创建或者修改一个信息结构。


1.1 定义新的抓取规则

抓取目标是:

  • 样本页面:http://www.360doc.com/content/06/1013/21/12542_229868.shtml
  • 主题名文章.www.360doc.com
  • 要抓取的内容:
    • 标题
    • 发表日期
    • 内容


图1

图1显示以下步骤:

  1. 为所有信息属性(用于存储抓取到的内容的字段)做数据映射FreeFormat映射。虽然FreeFormat映射不是必须的,但是采用FreeFormat映射可以大大提高抓取规则的适应度和抓取精度,即使目标网页结构修改了,采用FreeFormat技术后抓取规则在一定限度内也不会失效。360doc网页改变是比较频繁的,不是因为网页模板变了,而是会在网页中插入各种广告,这些改变都不会影响抓取规则。
  2. 为顶层容器节点文章做FreeFormat映射,也是可选操作,这是提高抓取精度的措施,详细参见《精确定位》
  3. 为信息属性内容设置block特性,即勾选block复选框,勾选后会弹出一个对话框。或者双击这个信息属性也能弹出一个对话框,都可以用来设置block特性,如下图。


图2

图2是双击信息属性后弹出的对话框,进行如下步骤:

  1. 勾选block复选框,以便设置block特性
  2. 选择特定过滤器
  3. 勾选所有节点复选框,会自动勾选文本内容图片复选框,表示抓取网页上所有HTML节点,包括HTML标签

信息结构定义完成后,按MetaStudio工具条上的schema按钮可以将信息结构和抓取规则保存到MetaSeeker服务器上,以便DataScraper随时随地使用抓取规则。


1.2 使用以前的抓取规则

假设别人已经定义了抓取规则,只需加载其信息结构就可拿来使用。本文定义的信息结构是文章.www.360doc.com/default,读者可以按照下面的步骤加载使用。


图3

图3显示如下步骤:

  1. 转到Schema List工作台
  2. 输入查询条件,可以包含多个通配符“*”,回车后等待查询结果
  3. 选中待加载的信息结构,点击鼠标右键,弹出菜单
  4. 选择菜单项“加载

加载过程需要一定时间,分别加载网页和信息结构,完成后在MetaStudio的状态条上显示“完成”字样。

注意:MetaStudio不允许接连加载两个使用相同样本页面的信息结构,例如,重复加载同一个信息结构或者不同信息结构但使用相同样本页面。如果这样操作,第二次加载同一个样本页面将导致MetaStudio一直处于等待状态,在状态条上不会显示“完成”字样。为了避免这个问题,需要重新运行MetaStudio。



2 抓取网页内容

通常我们都是使用DataScraper的网络爬虫批量抓取网页内容,本案例是个特例,只需抓取样本页面上的内容,用MetaStudio独自完成所有操作。假设使用1.1或者1.2介绍的方法已经将信息结构加载到工作台上了,进行下面的步骤。


图4

图4显示如下步骤:

  1. 转到Bucket Editor工作台
  2. 点击MAP按钮,生成网页抓取规则
  3. 点击TestThis按钮,测试抓取规则,可以看到在“输出信息”窗口中显示抓取结果,是一个XML文件,将XML文件内容完整地选中、拷贝和粘贴到一个文本编辑器中,保存到硬盘上,例如,起名为360doc.xml

注意:并不是所有文本编辑器都能做这件事,因为抓取到的内容含有中文,XML文档声明了UTF-8编码格式,如果编辑器存盘时不能设定UTF-8编码,则造成混乱,从而再也无法打开查看。



3 用火狐浏览器查看抓取结果

因为抓取结果是XML文件,只要用Firefox打开这个文件,就能看到抓取结果。由于设定了block特性而且抓取了整个HTML片段,浏览器看到360doc.xml甚至保留了原文的排版格式,但是过滤掉了原网页上的广告。



4 怎样抓取其它网页

只为抓取样本网页做这么一大堆操作有点不划算,定义好的信息结构可以套用到其它网页上。假设还要抓取网页:http://www.360doc.com/content/06/1013/21/12542_229862.shtml


图5

图5显示怎样套用模板抓取其它网页,有如下步骤:

  1. 在地址栏中输入待抓取网页的网址,并回车
  2. 观察内嵌浏览器加载目标网页
  3. 等待MetaStudio状态条上显示“完成”字样。
  4. 看到DOM树被刷新了
  5. 能够观察到工具条上的图标变成了红色,表示当前的网页不是样本页面了
  6. 选择菜单“文件”-〉“分析页面”,如果信息结构完全匹配,则工具条上的图标会再次变成绿色,而且会弹出一个对话框提示用户:如果需要上载并为自己保存专用的信息结构,那么需要修改主题名,否则,因为该信息结构的作者没有开放写权限,所以上载操作会失败。本案例不用关心这些问题。

接下来,进行前面章节介绍的步骤就可实现对这个网页的手工抓取。