抽取手机游戏类别网页的超链接

上一节讲了怎样扩展网络爬虫路线图,实际上是从广度上扩展网页数据抽取的范围,本来只抽取一类手机游戏数据,现在可以抽取12类游戏数据了,但是,至此,这12类游戏列表网页的超链接是通过定义12次信息结构实现的,虽然使用上节介绍的快捷方法可以在几分钟完成,但是,毕竟是手工创建了12个网页抽取线索,如果目标网站上的游戏类别变化了,用这些主题抽取网页数据时发现不了此变化。相反,如果这12个游戏列表网页的线索也是由MetaSeeker自动抽取得到的,那么目标网站的变化会自动感知。

如果目标网站上仅仅有10几或者20几类,手工为其建立各自的线索未尝不可,但是,如果目标网站上有几十甚至几百类(例如,阿里巴巴、ebay等电子商务网站),分类页面的超链接最好还是由MetaSeeker抽取获得。

这一节将讲解怎样定义一个主题,抽取得到目标网站上所有的手机游戏分类网页的超链接。这个工作可以形象地看成在深度方向上扩展网络爬虫线路图,即在主题demo_game_list_basic之前再增加一个主题,例如,命名为demo_game_channel。



定义上一级信息结构

同样,先要确定样本页面。目标网站的所有游戏类别的列表网页上都有游戏分类列表,似乎哪个都可以作为样本页面。我们再回顾一下规划网页内容抽取活动的指导思想:网站数据采集规划就是网站设计的逆向工程,所以,选择样本页面的时候应该体现目标网站的设计结构。所以,我们最终选择http://www.cn3gw.com/html/game/作为主题demo_game_channel的样本页面,这是游戏频道首页。

demo_game_channel的信息结构十分简单,仅仅为了抽取网页上的超链接,这些超链接可以引导网络爬虫爬行到手机游戏分类列表页(属于demo_game_list_basic主题)。在MetaStudio上怎样定义此抽取规则呢,有两个选择:

  • 在Bucket Editor工作台上定义数据抽取规则,抽取游戏分类名称和列表页URL地址,这跟前几节很类似。
  • 在Clue Editor工作台上定义超链接抽取规则。MetaStudio的Pattern类超链接抽取规则最适合做这个工作

两种方式都可以,要根据目标网页结构判断哪种最合适,在目标网页上,手机游戏分类网页的超链接可以在很多位置抽取到,我们最终选择图1所示位置,因为此处超链接最集中。此处,超链接放在两个HTML网页块中显示:“分类”和“其它分类”,所以,如果采用第一种方式,需要定义两个整理箱分别抽取这两块中的超链和分类名,如果采用方式二,可以不必区分这两块,但是只能抽取超链接而没有分类名。

图1(放大)

本文选择第二种方式,采用Pattern类线索抽取规则。在MetaStudio的Theme Editor工作台上命名主题(demo_game_channel)后直接转向Clue Editor工作台,创建一个线索,指定为Pattern类型,至此又得做一次决定:

  • 将所有游戏类别超链接归于同一个主题(即demo_game_list_basic)呢?
  • 还是将类别分别归于不同的主题?

图2(放大)

这决定两个不同的网络爬虫线路,如图2,如果需要将游戏类别超链接归于不同的主题,那么需要建立多个线索匹配Pattern。在这个网页上,实际上只有13个分类,而且不同分类的URL地址的格式都不同,所以,Pattern线索几乎发挥不了太大作用,实质上就是一个一个地指定每个分类URL属于哪个主题(相反,如果网页上的超链接的URL地址按照某种规则编写,Pattern规则可以按照URL地址格式归类超链接),而且这种方式无法自动监视网站是否增加了其它分类。所以,我们采用图2A的方式,将所有游戏分类超链接归于demo_game_list_basic主题,这样只需要建立一个Pattern规则即可,步骤如下:

  1. 建立线索Clue 0,并指定为Pattern类
  2. 定义Pattern线索操作区使用鼠标右键菜单插入建立一个Pattern规则
  3. 在DOM树视窗中找到表示图1所示区域的DOM节点(DIV[@class=lanright]),映射给线索clue 0,规定Pattern类线索的抽取范围
  4. 在图1所示区域找一个超链接作为样本,在DOM树视窗中定位到这个超链接的href属性(例如,显示为动作技巧的那个超链接),点击鼠标右键菜单线索映射->样式映射->scope 0,该超链接的URL地址就会填写到定义Pattern线索操作区的URL样式编辑框中
  5. 删除地址中的"/dongzuo/"字符串
  6. 填写主题名:demo_game_list_basic
  7. 上载信息结构

结果如图3

图3(放大)



下一步做什么

从主题demo_game_channel到demo_game_list_basic,将所有的手机游戏分类网页归于demo_game_list_basic主题下,接着从主题demo_game_list_basic到demo_game_basic,也没有考虑手机游戏类别,如图4A,如果处理数据抽取结果文件时想对属于不同类别的游戏进行不同的处理,想达到图4B的效果,该怎么办?这要用到一个技巧,在同一个主题下定义多个信息结构,每个信息结构利用网页上的特定标志进行区别,这样,网页数据抽取结果文件中的theme和middle信息可以用来区别游戏类别,下一节讲解。

图4(放大)