网页分析处理的极品模块Web::Scraper
我们在做各种自动化处理时,常常会希望能更加智能的得到网页中自己想要的元素,最好是象 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
@ 列表
给内容的部分,以列表的方法来存。
建议继续学习:
- perl更新/修改/删除文本文件内容 (阅读:9483)
- perl大牛flw传说 (阅读:6525)
- perl模块Getopt::Std用法及实例-从命令行读取参数模块 (阅读:5941)
- [Perl] Template::Toolkit 模板技术. (阅读:5385)
- 在perl中连接和使用sqlite做数据存储 (阅读:5111)
- Perl命令行常见用法及技巧 (阅读:4869)
- perl的expect使用方法,实现非交互式登录。 (阅读:4547)
- Perl 倒行分析文件方法。perl读文本文件,从末尾往前读. (阅读:4497)
- perl模块之MIME::Lite发送有附件的邮件 (阅读:4460)
- perl大牛唐凤传说 (阅读:4287)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:扶凯 来源: 扶凯
- 标签: Perl Scraper 网页分析
- 发布时间:2010-11-29 20:55:12
- [69] Twitter/微博客的学习摘要
- [67] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [65] android 开发入门
- [63] find命令的一点注意事项
- [62] Go Reflect 性能
- [61] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [57] 读书笔记-壹百度:百度十年千倍的29条法则