簡體   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