网页分析处理的极品模块Web::Scraper

我们在做各种自动化处理时,常常会希望能更加智能的得到网页中自己想要的元素,最好是象 css 和 div 中的信息来取得,就会更加方便,这个 Web::Scraper 是我用过的几个模块中最方便的,这也是大侠 miyagawa 所写.根据 ChangeLog 最早是 2007 年开发,好象 Web::Scraper 的灵感是来自己 Ruby 的 Scrapi ,它是一个使用 DSL 风格来写的 Scrapper .


怎么样取得 XPath


建议使用Firefox 的 firebug 和这个软件配合是极品.直接使用 firebug 选择要取出的文件的相关的部分点右键,选择"查看元素",在深色选中的部分在次点右键,选择 "复制 XPath". 选择内容->查看元素-> 复制 XPath .

如下,直接在要处理的元素上点右键,选择查看元素.

接着,要 Firebug 出现的界面的元素中选择 复制 XPath.

会得到 XPath 的地址 ,'/html/body/div/div/div[2]/div[3]/div[4]/ul/li[6]/a' 象这种.这样不用我们自己来写网页的 Xpath 的地方了 ,相当的方便.不过有个小细节,好象 scraper 不支持多个 tbody .所以记的要删除.

 

使用 Web::Scraper 的方法

使用 Web::Scraper 前,我们可以直接使用 scraper 的命令行模式,这个超级方便我们来调试,直到我们取出所有我们要的文件内容.

(1. 使用 scraper 进入命令行模式
#scraper Filename or Url‘

下面我直接打开一个在线的网页

(2. 显示当前正在处理的 HTML 本身.
进入后,有几个常用的命令可以使用,比如下面的命令,它会显示下载 or 打开的整个网页的内容,显示 HTML 本身

1
2
3
scraper> s
 
.....

 

(3. 显示一个 XPath 中的详细内容
在这个命行中,有个 WARN 的方法可以调用.用来显示当前 XPath 中的内容

1
2
3
4
5
6
7
8
9
scraper> process '/html/body/div/div[8]/table/tr[2]/td' , WARN ;
<td >1</td>
<td >扶凯</td>
<td >个人</td>
<td >渝ICP备10001691号-1</a></td>
<td >扶凯</td>
<td><div><a href= "/go/?domain=www.php-oa.com" target= "_blank" >www.php-oa.com</a></div></td>
<td >2010-01-07</td>
<td ><a href= "/details/%d3%e5ICP%b1%b810001691%ba%c5-1" target= "_blank" >详情</a></td>

 

(4. 给标签中的内容存到一个变量 key 中
下面的显示,是给内容直接转成 Yaml 的格式显示出来.另外还可以存成一个数组,
主要语法是
process <CSS式 or XPath式>, '保存的变量的名字' => '保存方式';
接着看下面吧

1
2
3
4
scraper> process '/html/body/div/div[8]/table/tr[2]/td[6]' , 'key' => 'TEXT'
scraper> y
---
key: www.php-oa.com

 

(5. 给标签中的内容存到一个数组中
以数组的方法来取得多个文件直接在变量名后加 [] 就行了,这是这的 td 一定要是在这个下面有多个.本来值是 td[1],td[2] 这种,数组的话,给 XPath 替换成 td.

1
2
3
4
5
6
7
8
9
10
11
12
scraper> process '/html/body/div/div[8]/table/tr[2]/td' , 'key[]' => 'TEXT'
scraper> y
---
key:
- 1
- 扶凯
- 个人
- 渝ICP备10001691号-1
- 扶凯
- www.php-oa.com
- 2010-01-07
- 详情

 

(6. 输出刚才测试的内容成 Perl 文件
这个命令执行最后一个输入成 Perl 文件的形式,c all 会输出所有测试过的内容成一个 Perl 文件

1
2
3
4
5
6
7
8
9
10
11
scraper> c
#!/usr/bin/perl
use strict;
use Web::Scraper;
use URI;
 
my $scraper = scraper {
process '/html/body/div/div[8]/table/tr[2]/td[6]' , 'key' => 'TEXT' ;
};
my $result = $scraper ->scrape( $uri );

 

 

Web::Scraper 备注

上面的例子中,都有个 TEXT 是指的保存方式' .
process <CSS式 or XPath式>, '保存的变量的名字' => '保存方式';
保存方式的详细方法有如下几种:

TEXT
只有普通的文字,才会放进来,如下所示

'<a href="/go/?domain=www.php-oa.com" target="_blank">www.php-oa.com</a>'

 HTML
整个 html 的内容都会包含进来,象下面这样的输出,会包含有 html 本身的标签. 如下所示

www.php-oa.com
  @ 列表
给内容的部分,以列表的方法来存
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值