繁体   English   中英

使用 www::mechanize 的刮板

[英]Scraper using www::mechanize

我正在用 perl 编写我的第一个刮板,但遇到了一些问题。 我认为当我提交表单时总是一个发布请求。 但是我有这个网站,我想从中获取数据,即使它有一个表单,它似乎也只有 get 方法。 另外我不知道如何提交表单,它有带有下拉菜单的字段来选择值。

任何人都可以帮助我一些想法吗? 到目前为止,我设法建立到 URL 的连接并获取其内容。 我被困住了。

use strict;
use warnings;
 
use WWW::Mechanize;
use Data::Dumper;
 
my $homepage = 'http://bacalaureat.edu.ro//';
my $source;
 
my $browser = WWW::Mechanize->new();
$browser->agent_alias('Windows Mozilla');
$browser->get($homepage);

if ($browser->success()) {
    $source = $browser->content();
    print "Page Source: \n\n\n" . $source . "\n\n\n";
} else {
    print "Could not access $homepage! Status: " . $browser->status() . "\n";
}

您必须加载带有表单的页面,填写输入元素并提交。

通常,您将其加载到浏览器中,然后编写代码以模仿您将要通过键盘进行的操作。

此页面上没有标签,也没有提交。 此页面仅将您重定向到URL: /Pages/JudetRezultAlfa.aspx?jud=$ID $ID其中$IDselJud字段的值。

因此,所有你需要的是解析HTML(获得selJud的值)和下一$mech->get("http://bacalaureat.edu.ro/Pages/JudetRezultAlfa.aspx?jud=" . $ID)使用selJud你想。

WWW::Mechanize模块想要像浏览器一样运行。 与其考虑低级操作,不如考虑您正在执行的逻辑任务。

在其文档的第一个示例中,它导航到一个页面,使用get来启动链。 然后,它决定对其所在的当前页面进行处理,例如follow_linksubmit_form 您不必担心它是如何做到的,因为它会为您解决问题:

use WWW::Mechanize ();
my $mech = WWW::Mechanize->new();
 
$mech->get( $url );
 
$mech->follow_link( n => 3 );
$mech->follow_link( text_regex => qr/download this/i );
$mech->follow_link( url => 'http://host.com/index.html' );
 
$mech->submit_form(
    form_number => 3,
    fields      => {
        username    => 'mungo',
        password    => 'lost-and-alone',
    }
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM