如何在Perl的WWW :: Mechanize中处理一个简单的循环?

时间:2011-05-18 19:10:15

标签: perl parsing dom mechanize

对我来说特别有趣,因为PHP / Perl-beginner是瑞士的这个网站: see this link:http://www.edi.admin.ch/esv/00475/00698/index.html?lang=de&webgrab_path=http://esv2000.edi.admin.ch/d/entry.asp?Id=1308 其中包含2700个基础的数据集。所有数据均可免费使用,不受版权限制。

到目前为止我们所拥有的东西:如果我采用WWW :: Mechanize,收获任务应该没问题 - 特别是在进行基于表单的搜索和选择单个条目时。嗯 - 我猜这个算法基本上是2个嵌套循环:外循环运行基于表单的搜索,内循环处理搜索结果。

外部循环将在页面上的第二个搜索表单上使用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中执行此操作

1 个答案:

答案 0 :(得分:0)

“其中包含2700个基础的数据集。所有数据均可免费使用,不受任何版权限制。”

不正确。见http://perlmonks.org/?node_id=905767

“即使数据是免费提供的,数据也受版权保护:”下载或复制文本,插图,照片或任何其他数据不会导致内容权利的任何转让。“(同样,德语,如你之前一直在把一些其他的德国名单写成垃圾邮件。“