【问题标题】:How can I fetch the same URL with different query string with Perl's LWP::UserAgent?如何使用 Perl 的 LWP::UserAgent 获取具有不同查询字符串的相同 URL?
【发布时间】:2011-04-29 09:50:45
【问题描述】:

我查找了有关使用 LWP 的文章,但我仍然迷路了!在这个网站上,我们找到了许多学校的名单;查看overview-page 并点击一些链接并获得一些结果页面:

我想使用 LWP::UserAgent 解析网站并进行解析:想要使用 HTML::TreeBuilder::XPath 或 HTML::TokeParser

目前我正在考虑选择正确的获取请求! 我对 LWP::Useragent 有一些问题。可以通过直接链接访问概览的子站点。但是-注意:每个站点都有内容。例如上述结果页面的以下 URL。

作为新手,我无法通过发布完整 URL 向您展示不同结尾的结尾,但在这里您可以看到结尾:

id=21&extern_eid=709
id=21&extern_eid=789
id=21&extern_eid=1297
id=21&extern_eid=761

有许多不同的 URL,在 URL 的末尾有所不同。问题是:我如何运行 LWP::UserAgent?我想要获取和解析 & ** 所有 - 1000 个站点。**

问题; LWP 会自动完成这项工作吗!?还是我必须设置 LWP :: UserAgent 它会自动查找不同的 URL...

解决方案:也许我们必须从零开始数到 10000

extern_eid=709 -(从零计数到 100000)这里

www-db.sn.schule.de/index.php?id=21&extern_eid=709

顺便说一句:这里是 LWP 用户代理的数据;

请求方法 描述的方法 在本节中用于调度 通过用户代理请求。这 以下请求方法是 提供:

$ua->get( $url ) $ua->get( $url , $field_name => $value, ...)

这个方法会发送一个 GET 在给定的 $url 上请求。进一步 可以给出参数来初始化 请求的标头。这些是 作为单独的名称/值对给出。 返回值是一个响应对象。 有关说明,请参见 HTTP::Response 它提供的接口。那里 仍将是响应对象 当 LWP 无法连接到 URL 中指定的服务器或何时 协议处理程序中的其他故障 发生。

问题是:如何在上述网站上以正确的方式使用 LWP::UserAgent - 有效!?

我期待任何和所有的帮助!

【问题讨论】:

  • 这个问题怎么会被标记为 PHP?看起来这是一个 Perl 问题...
  • 您好 Alvin - 非常感谢您的来信。肯定的事。这是一个真正的 Perl 问题。我太累了,打错了标签!现在我已经纠正了!再次 - 谢谢你的回答!谢谢 ;-)

标签: perl url methods lwp-useragent


【解决方案1】:

您出于网络抓取的目的描述了以下链接。 LWP 子类 WWW::Mechanize 比您当前的尝试更容易做到这一点。

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,您正试图在具有不同查询参数的相同 URL 上使用 LWP::UserAgent,您想知道 LWP::UserAgent 是否为您提供了一种循环查询参数的方法?

    我不认为 LWP::UserAgent 有办法让你做到这一点。但是,您可以使用循环构造 URL 并重复使用 LWP::UserAgent:

    for my $id (0 .. 100000)
    {
        $ua->get($url."?id=21&extern_eid=".(709-$id))
        //rest of the code
    }
    

    或者,您可以添加一个 request_prepare 处理程序,在发送请求之前计算并添加查询参数。

    【讨论】:

    • 非常感谢阿尔文!或者 - 我最好这样做:对于我的 $i (0..10000) { $ua->get('www-db.sn.schule.de/index.php', id => 21, extern_uid => $i); # process reply } 在任何情况下,对这种工作使用这样的循环是一种方法。我猜 LWP API 的目的不是要取代核心 Perl 的功能,我们可以使用 Perl 循环来查询多个 URL。如果我创建一个循环 - 我有一些不匹配的结果:我在随后的解析过程中做什么。我要检查!?我必须进行检查以消除所有不匹配的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多