[学习perl 练手用,请勿用于商业用途,尊重别人的劳动成果,访问一下提供资料的网站,最好看一下它的广告
]
想到写这个脚本纯粹是好奇,有一天因为工作需要查询软件登记,但这个网站的查询系统做的极其低劣,不可以做模糊查询或者关键字查询,只好一页一页的查询,后来就产生了写一个脚本的想法,最后生成的文件是tab 分割的,至于如何导入到数据库中,以后再写吧
分析一下它的url 很有意思
curPage=2&
count=10最后面count=10 表示美页显示10 条,我发现改成 count=1000 果然显示1000 条,另外缺省count=10 差不多有20000 多页,而它的页面选择list 直接包含了20000 多选项,没把系统搞趴下已经不错了,这20000多个选项直接导致一个页面有2.4M
废话不多说了,下面是代码
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use HTML::Tree;
use URI;
my $url = URI->new('');
my $query_temp = 'method=list&no=fck&sql_name=&sql_regnum=&sql_author=&sortLabel=registerDate&sortOrder=&count=5000&curPage=';
my $localfile;
my $locdir = 'cpcc';
my $query ;
my $max_count =36;
my $i ;
mkdir($locdir);
for($i=1;$i<$max_count;$i++)
{
$query = "$query_temp$i";
$localfile = "$locdir\/$i.html";
$url->query($query);
getstore($url->as_string, $localfile);
}
# now merge files
my $filename;
open DIRFILE ,"-|", "ls $locdir |grep html\$|sort -t\. -n" ;
while(<DIRFILE>)
{
chomp ;
$filename = $_;
&process_file($filename);
}
close DIRFILE ;
sub process_file
{
my $infile;
$infile = shift;
$infile = "$locdir\/$infile" ;
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($infile); # !
my $text;
foreach my $table ( $tree->look_down('_tag', 'table',sub{$_[0]->attr('bordercolor') =~ /^#CCCCCC/}))
{
if($table)
{
foreach my $tr ( $table->look_down('_tag', 'tr'))
{
if($tr)
{
foreach my $td ( $tr->look_down('_tag', 'td'))
{
if($td)
{
$text = $td->as_text; # !
chomp $text;
print $text ,"\t" ;
}
}
print "\r\n";
}
}
}
}
$tree->delete; # clear memory!
}
|
阅读(540) | 评论(0) | 转发(0) |