0

请告诉我哪个模块用于抓取一个完全用 ASP 开发的网站,并且它的所有内容都不是正确的 HTML 语法。

4

2 回答 2

3

使用哪种语言开发网站并不重要。您(客户)从网站获得的只是生成的 HTML(或在这种情况下损坏的 HTML)。

您可以使用“LWP”库和“get”函数将网站内容读入变量...然后使用正则表达式对其进行分析。

像这样:

use strict;
use LWP::Simple;
my $url = 'http://...';
my $content = get $url;
if ($content =~ m/.../) {
    ...
}
于 2012-09-11T12:05:41.393 回答
2

或者你可以使用WWW::Mechanize。它建立在LWP(这LWP::Simple是一个非常简单的子集)之上,并提供了许多方便的“类似浏览器”的行为。例如,带有登录 cookie 和其他内容的 ASP 生成网站的典型会话管理由 Mechanize 自动处理。

use strict; use warnings;
use WWW::Mechanize;
my $mech = WWW::Mechanize->new;
$mech->get( 'http:://www.example.org/login.asp' );
$mech->submit_form(
    form_number => 3,
    fields      => {
        username    => 'test',
        password    => 'secret',
    }
);

虽然这首先有利于测试,但它仍然具有 LWP 继承的方法,您可以访问普通请求。因此,您也可以访问请求,同时仍然拥有内置解析器访问表单和链接的能力。

还要考虑使用适当的 HTML 解析器,即使网站的输出不是很花哨。周围有几个可以处理它。这比仅仅建立一堆正则表达式要容易得多。一旦您需要返回,这些将很难维护,因为页面已经更改了某些内容。

以下是包含此主题信息的相关问题列表:

于 2012-09-11T12:40:24.493 回答