使用perl脚本抓取网页总结
2010-06-22 17:59
274 查看
使用perl实现网页抓取,对网络蜘蛛的初步尝试。
use HTML::HeadParser; 对部分进行解析,得到标题、编码、关键词等
use HTML::FormatText::WithLinks; 将html变成文本可读样式
use Encode qw/encode decode/; 解决不同网页的编码问题
关于编码首先应该弄清楚的概念
Perl字符串是使用utf8编码的,也就是说读进perl的字符的编码格式都是utf8;
读取输入时,perl会自动将其转换为urf8,输出时的编码依据运行环境已经上下游环境。
入库的内容也要进行转义;
遗留问题:IIS对perl的支持,配置没有问题,增加了对.pl、.cgi的定义,测试时发现在IE下正常,在firefox下弹出保存文件的对话框,但是以前的.pl正常。估计于haed的输出有关系,还有待于进一步的测试。
其格式很简单:
$octets = encode(ENCODING, $string [, CHECK])
$string: Perl字符串
encoding: 是给定的编码方式
$octets: 是编码之后的字节流
check: 表示转换时如何处理畸变字符(也就是Perl认不出来的字符)。一般不需使用
decode函数则是用来解码字节流的。它按照你给出的编码格式解释给定的字节流,将其转化为使用utf8编码的Perl字符串,一般来说从终端或者文件取得的文本数据都应该用decode转换为Perl字符串的形式。它的格式为:
$string = decode(ENCODING, $octets [, CHECK])
$string、ENCODING、$octets和CHECK的含义同上。
明白如何使用该函数的例子:
环境
windows xp,IIS,perl 5.88,CMD使用到的模块
use LWP::Simple; 用来得到网页use HTML::HeadParser; 对部分进行解析,得到标题、编码、关键词等
use HTML::FormatText::WithLinks; 将html变成文本可读样式
use Encode qw/encode decode/; 解决不同网页的编码问题
需求
在CMD中调试,最后IIS中调用,解析结果要保存到数据库中,数据库中采用utf8编码,解析的网页为gb2312编码,所以理清编码特别重要。关于编码首先应该弄清楚的概念
Perl字符串是使用utf8编码的,也就是说读进perl的字符的编码格式都是utf8;
读取输入时,perl会自动将其转换为urf8,输出时的编码依据运行环境已经上下游环境。
乱码问题
脚本使用ANSI编码,只是数据库的内容使用decode,结果内容有个别字符乱码,是HTML::FormatText::WithLinks; 将html变成文本可读样式时出现问题。可以算是一个bug解决方法
脚本实用utf8编码,得到的网页首先进行decode,再进行其他的处理,问题解决,但在cmd下调试的时候,会有“Wide character in print”警告信息,因为环境是gbk,输出urt8编码是会报警,使用encode(”euc-cn”, $value),对输出进行转义,可以解决这个问题,而网上说的加 use encoding “utf-8″; 不能解决这个问题。其他需要注意的问题
调用匹配的内容再去匹配其他内容时,注意对该内容的元字符进行转义;入库的内容也要进行转义;
遗留问题:IIS对perl的支持,配置没有问题,增加了对.pl、.cgi的定义,测试时发现在IE下正常,在firefox下弹出保存文件的对话框,但是以前的.pl正常。估计于haed的输出有关系,还有待于进一步的测试。
encode、decode函数说明
encode函数是用来编码Perl字符串的。它将Perl字符串中的字符用指定的编码格式编码,最终转化为字节流的形式,因此和Perl处理环境之外的事物打交道经常需要它。其格式很简单:
$octets = encode(ENCODING, $string [, CHECK])
$string: Perl字符串
encoding: 是给定的编码方式
$octets: 是编码之后的字节流
check: 表示转换时如何处理畸变字符(也就是Perl认不出来的字符)。一般不需使用
decode函数则是用来解码字节流的。它按照你给出的编码格式解释给定的字节流,将其转化为使用utf8编码的Perl字符串,一般来说从终端或者文件取得的文本数据都应该用decode转换为Perl字符串的形式。它的格式为:
$string = decode(ENCODING, $octets [, CHECK])
$string、ENCODING、$octets和CHECK的含义同上。
明白如何使用该函数的例子:
use Encode; $dat="测试文本"; $str=decode("gb2312",$dat); @chars=split //,$str; foreach $char (@chars) { print encode("gb2312",$char),"/n"; }
相关文章推荐
- 使用Perl进行网页数据抓取[初学者简明版]
- 使用Python3编写抓取网页和只抓网页图片的脚本
- 使用Python3编写抓取网页和只抓网页图片的脚本
- 针对网页流量的Dos攻击脚本(使用代理服务器)
- html 网页代码大全,总结,使用
- 使用System.Text.RegularExpression中的API实现网页数据的抓取
- Python使用Selenium + PhantomJS抓取动态网页:今日头条
- nodejs使用superagent抓取网页,cheerio分析网页
- python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
- html网页中使用javascript脚本调用xml文档实例
- C#如何使用HttpWebRequest、HttpWebResponse模拟浏览器抓取网页内容
- 使用 Perl 脚本实现交互式命令行程序的管理与测试自动化
- python爬虫 使用真实浏览器打开网页的两种方法总结
- Shell脚本test命令使用总结和实例
- python使用urllib2抓取网页
- Asp 使用 Microsoft.XMLHTTP 抓取网页内容并过滤需要的
- 使用java开源工具httpClient及jsoup抓取解析网页数据
- ZH奶酪:PHP 使用DOMDocument抓取网页
- 使用Jsoup进行网页数据抓取
- 零基础写python爬虫之使用urllib2组件抓取网页内容