然后在perl脚本中写:
!#usr/bin/perl -w
use strict
use DBI#使用DBI模块,DBD::mysql是驱动不必在脚本中使用,安装了就行
my $dbname = ""#引号里填上数据库名
my $ip = "" #引号里填上要访问的数据库的ip地址,数据库是本机就写127.0.0.1
my $port = "" #引号里填上要访问的数据库的端口号,mysql默认端口号是3306
my $host = "dbi:mysql:" . $dbname . ":" . $ip . ":" . $port
my $user = "root"#访问数据库使用的用户名
my $password = "xXxX" #该用户名所使用的密码
my $dbh = DBI ->connect($host,$user,$password) or die "$@" #与数据库建立连接
$dbh ->do("set names \'gbk\'") #设置输出中文不乱码
while(1)#条件永远为真,除非人为终止,否则不会停止
{#可以使用control+c停止脚本执行
my $sql = "" #引号里填上sql语句
$sth = $dbh ->prepare($sql)#送入数据库做准备
$sth ->execute()#执行这条sql语句
sleep(300) #设置300秒暂停执行,300秒后继续执行while
}
$dbh ->disconnect() #断开与数据库的连接
这里使用的是最新的perl和最新的mysql最新,不是复制粘贴别人代码,前几天还在用,保证思路没有问题。
my ($hash_ref,$key)my %data
my $i=0
while ($hash_ref = $sth->fetchrow_hashref()) {
$data{$i} = $hash_ref
$i = $i +1
}
用AnyEvent的话实际上就是用异步IO。因为网页获取是IO-bound的,用LWP::UserAgent的话是最基本的同步IO方式,很多时间浪费在阻塞上了。那么常规的并发思路主要是两个改进方向,一个是用多CPU线程做并发,另一个是在单CPU线程内利用异步IO来提高效率。相对于异步IO来说,很多时候利用多线程运行同步IO所能得到的提高可能比较有限,所以实际是异步IO用的比较多。AnyEvent的作者和libev的作者是同一个人。AnyEvent可以使用libev做后端的event looper。这个应该就是有人用AnyEvent的原因。Mojo也是可以用libev做后端的,所以Mojo也可以。刚才搜了一下,下面的例子就是用Mojo的(实际上part1是告诉你怎么用Mojo,part2告诉你自己再改再调的话可以达到更好的性能)。
另外我感觉是不是Python有更强更成熟的crawler framework,所以也可以看看Python。用Perl的话可能就是更多地要roll-your-own了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)