【问题标题】:Dom-Processing with Perl-Mechanize: finalizing a little programme使用 Perl-Mechanize 进行 Dom 处理:完成一个小程序
【发布时间】:2011-08-29 06:34:21
【问题描述】:

我目前正在使用this dataset of 2700 foundations 制作一个小型收割机。所有数据均可免费使用,没有任何限制或版权问题。

到目前为止我所拥有的: 如果我使用 WWW::Mechanize,那么收获任务应该没有问题——尤其是在进行基于表单的搜索和选择单个条目时。嗯——我猜这个算法基本上是两个嵌套循环:外层循环运行基于表单的搜索,内层循环处理搜索结果。

外部循环将使用页面上第二个搜索表单上的select()submit_form() 函数。我们可以在这里使用 DOM 处理吗?好吧——我们怎样才能得到选择值。

通过结果的内部循环将使用以下链接函数通过以下调用获取实际条目。

$mech->follow_link(url_regex => qr/webgrab_path=http:\/\/evs2000.*\?
Id=\d+$/, n => $result_nbr);

这会将我们的机械浏览器转发到入口页面。基本上,URL 查询会查找具有 webgrap_path 到 Id 模式的链接,该模式对于每个数据库条目都是唯一的。 $result_nbr 变量告诉 mecha 它接下来应该遵循哪一个结果。

如果我们有多个结果页面,我们也将使用相同的技巧来遍历结果页面。对于条目信息的语义提取,我们可以使用 XML 解析实际条目的内容:LibXML 的 html 解析器(在此页面上运行良好),因为它为您提供了一些强大的 DOM 选择(使用XPath) 方法。 嗯,页面的实际循环应该可以在几行 Perl 中实现(最多 20 行——可能更少)。

等一下:入口页面的处理将是最复杂的部分 的脚本。

方法:原则上我们可以用一个while循环来做同样的算法 如果我们巧妙地使用 back() 函数。

你能给我一个提示吗?开始 - 入口页面的处理 - 在 Perl:: Mechanize 中执行此操作?

这是我所拥有的:

 GetThePage(
    starting url 
);
sub GetThePage {
    my $mech ...
    my @pages = ...
    while(@pages) {
       my $page = shift @pages;
       $mech->get( $page );
       push @pages, GetMorePages( $mech );
       SomethingImportant( $mech );
       SomethingXPATH( $mech );
    }
}

问题是如何找到 DOM 路径。

【问题讨论】:

    标签: perl parsing dom mechanize relative-path


    【解决方案1】:

    使用 Firebug、Opera Dragonfly、Chromium 开发工具。

    调用指定元素的上下文菜单,将 XPath 表达式或 CSS 选择器(对 Web::Query 有用)复制到剪贴板。

    【讨论】:

      【解决方案2】:

      你真的想用Web::Scraper做这种事情。

      【讨论】:

      • 没有回答如何查找 DOM 路径的问题
      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多