Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72953
  • 博文数量: 13
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-22 10:41
文章分类
文章存档

2010年(2)

2009年(11)

我的朋友

分类:

2009-07-30 12:18:12

[学习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) |
给主人留下些什么吧!~~