2013-04-24 39 views
0

我必须填写多个网页上的表单。我试图获取数据,将html解析为文本,并将其存储在单个文件中。每个Web表单都有不同的字段需要填写;这是其中之一的代码。我还有三个。建议表示赞赏 - 谢谢!Perl将多个网页并行机械化

use strict; 
use warnings; 
my $timeout=40; 
use WWW::Mechanize; 
use HTML::TreeBuilder; 
use HTML::FormatText; 
use HTML::Parser; 
use autodie qw/ open close /; 
use 5.012; 
use Win32::IE::Mechanize; 
use Time::HiRes 'sleep'; 
my $m = WWW::Mechanize->new(autocheck => 1); 
my $browser = Win32::IE::Mechanize->new(visible => 1); 
my $snp = "rs111"; 
my $content= $browser->get("http://snp-nexus.org/index.html"); 
my $html = $browser->content; 
$browser->form_name ('snpnexus'); 
$browser->field('batch_text', 'dbsnp rs111'); 
$browser->tick('ensembl', "ensembl"); 
$browser->tick('refseq','refseq'); 
$browser->tick('ucsc','ucsc'); 
$browser->tick("sift",'sift'); 
$browser->tick("polyphen",'polyphen'); 
$browser->tick("chb",'chb'); 
$browser->tick("chd",'chd'); 
$browser->tick("tfbs",'tfbs'); 
$browser->tick("consv",'consv'); 
$browser->tick("gwas",'gwas'); 
$browser->tick("indel",'indel'); 
$browser->tick("mirbase" ,'mirbase'); 
$browser->tick('gad','gad'); 
$browser->tick('cnp' , 'cnp'); 
$browser->click_button('value', 'RUN'); 
for (0 .. $timeout*20) { 
last if $browser->{agent}->ReadyState >=5; 
sleep 0.1; 
} 
my $html2 = $browser->content; 

my $Format =HTML::FormatText->new(); 
my $TreeBuilder =HTML::TreeBuilder->new(); 
$TreeBuilder->parse($html2); 
my $parsed= $Format->format($TreeBuilder); 

print $parsed; 

回答

0

您不需要使用Perl和Mechanize来提交批量查询。他们的指南页面详细介绍了如何使用制表符分隔文件提交批量信息请求。

http://snp-nexus.org/guide.html

这有帮助吗?报价:

SNPnexus允许用户在处理大量变化时提交批量查询。用户可以将变体列表直接粘贴到设计的文本空间中,也可以上传包含查询的文件。目前,我们将单个批量查询中的最大变体数限制为100,000。我们只允许使用基因组位置和/或dbsnp rs#格式进行批量查询。不允许染色体区域查询数据。每个变体必须在一个新的行与制表符分隔的数据以下列格式之一:

+0

是的我可以提交文本文件,但我需要的是使用Perl的机械化,使一个网络爬虫,使我可以浏览多个页面以获得单一的snp id,以实现功能化。所以我只想要如何修改我的代码,使其一次为多个网页工作。谢谢你的时间 – 2013-04-25 08:56:53