从国家自然科学基金里面爬取所有的基金项目
发布时间:2020-12-15 21:11:08 所属栏目:大数据 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 use LWP::UserAgent;use HTML::TreeBuilder;use LWP::Simple;use URI;use Encode;use LWP::UserAgent;use HTTP::Cookies;###########################
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 use LWP::UserAgent; use HTML::TreeBuilder; use LWP::Simple; use URI; use Encode; use LWP::UserAgent; use HTTP::Cookies; ########################################################### ###1,首先构造一系列网页地址 ########################################################### @list_url=(); @download_url=(); foreach (1..2927)#首先自己看看需要爬多少个页面 { my $url = URI->new('http://npd.nsfc.gov.cn/projectSearch!search.action?'); my($field,$page) = ("C",$_);#对C这个领域做查询,页面累积变化 $url->query_form ( # All form pairs: 'project.applyCode' => $field,#搜索的领域,此处固定为C,是生命科学的代码 'currentPage' => $page,); push @list_url,$url; } #自己构造所有的网页地址,以便后面的浏览器访问 #map{print "$_n"} @list_url; #测试了一些,网址生成没有问题 ########################################################### ###2,然后构造perl的模拟浏览器 ########################################################### my $tmp_ua = LWP::UserAgent->new; #UserAgent用来发送网页访问请求 $tmp_ua->timeout(15); ##连接超时时间设为15秒 $tmp_ua->protocols_allowed( [ 'http','https' ] ); ##只允许http和https协议 $tmp_ua->agent( "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;.NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" ) ; ##用来在header中告诉服务器你用的是什么"浏览器",设置文件头的User-Agent my $cookie_jar = '.mozilla/firefox/bg146ia6.default/cookies.sqlite'; $tmp_ua->cookie_jar(HTTP::Cookies->new('file'=>"$ENV{'HOME'}/$cookie_jar",'autosave'=>1)); ########################################################### ###3,最后一个个爬取我们构造好的网站地址,找到相应的信息 ########################################################### open FH,">aa.txt"; #可以保存我们需要的东西 $url_index="http://npd.nsfc.gov.cn/"; #必须要先访问一下主页并且保存cookies才能爬查询网页 my $response = $tmp_ua->get($url_index); #访问了主页的同时也储存了cookies #$html=$response->content; #print encode("cp936",decode("utf8",$html)); #my $response = $tmp_ua->get($list_url[3]); #$html=$response->content; #print encode("cp936",$html)); #经测试,可以访问每个项目页面了 #这些都只是一步一步的测试 #接下来做正事,访问所有的页面,一个个爬取信息 foreach (@list_url)#对我们自己合成的目标url做循环爬取适合的链接 { my $response = $tmp_ua->get($_); $html=$response->content; my $tree = HTML::TreeBuilder->new; # empty tree $tree->parse($html) or print "error : parse html "; @dl_list=$tree->find_by_attribute("class","time_dl") or print "error : cannot find time_dl"; foreach (@dl_list) { $dt_node=$_->look_down(_tag=>'dt'); $dt_a_node=$dt_node->look_down(_tag=>'a');#dt标签里面的a是基金项目的网站介绍 print FH $url_index.$dt_a_node->attr('href'); print FH "t"; print FH encode("cp936",$dt_a_node->as_text()));#基因项目的名字 print FH "t"; @node=$_->look_down(_tag=>'dd'); #dd表格里面的是关于这个基金的各种描述 map{print FH encode("cp936",$_->as_text()))}@node; print FH "n"; } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |