技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> 网页分析处理的极品模块Web::Scraper

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

浏览:1784次  出处信息

我们在做各种自动化处理时,常常会希望能更加智能的得到网页中自己想要的元素,最好是象 css 和 div 中的信息来取得,就会更加方便,这个 Web::Scraper 是我用过的几个模块中最方便的,还包括了一

在使用 Web::Scraper 的时候,我们需要先有 Xpath 的路程,这个是网页结构解析出来的结构的路径。
如果对 XPath 不了解,看我以前的文章 : XPath 的简单语法介绍. 这个中有 XPath 的简单语法介绍.

怎么样取得 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‘

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

#scraper http://icp.valu.cn/piliang/chaxun?domains=php-oa.com
scraper>

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

scraper> s
 
.....

 

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

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式>, ‘保存的变量的名字’ => ‘保存方式’;
接着看下面吧

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.

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 文件

scraper> c
#!/usr/bin/perl
use strict;
use Web::Scraper;
use URI;
 
my $uri = URI->new("http://icp.valu.cn/piliang/chaxun?domains=php-oa.com");
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

 @ 列表
给内容的部分,以列表的方法来存。

建议继续学习:

  1. perl更新/修改/删除文本文件内容    (阅读:9440)
  2. perl大牛flw传说    (阅读:6516)
  3. perl模块Getopt::Std用法及实例-从命令行读取参数模块    (阅读:5889)
  4. [Perl] Template::Toolkit 模板技术.    (阅读:5370)
  5. 在perl中连接和使用sqlite做数据存储    (阅读:5065)
  6. Perl命令行常见用法及技巧    (阅读:4812)
  7. perl的expect使用方法,实现非交互式登录。    (阅读:4499)
  8. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读.    (阅读:4444)
  9. perl模块之MIME::Lite发送有附件的邮件    (阅读:4448)
  10. perl大牛唐凤传说    (阅读:4276)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1