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

标签 perl parsing dom mechanize

作为 PHP/Perl 初学者,对我来说特别有趣的是瑞士的这个站点:
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处理吗?好吧 - 我们如何获得选择值。

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

$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

最佳答案

“其中有一个包含 2700 个基金会的数据集。所有数据都可以免费使用,不受版权限制。”

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

“即使数据是免费提供的,也受版权保护:“下载或复制文本、插图、照片或任何其他数据并不意味着对内容的任何权利转让。”(同样,在德语中,正如你所说的那样之前一直在抓取其他一些德国垃圾邮件列表)。”

关于perl - 如何在 Perl WWW::Mechanize 中处理一个简单的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6049823/

相关文章:

perl - 为什么这个 Perl 会产生 "Not a CODE reference?"

perl - 如何使用 perl 语言在 selenium 远程驱动程序中打开新选项卡并打开 url

linux - Perl:在需要之前显示子例程输出

c++ stringstream 太慢了,怎么提速?

Delphi XE IDE代码解析器错误: "Expected ' >' but ' .' found."

php - 将 php.inc 文件导入 PERL 程序

excel - Perl 'can' t 通过包 "worksheets"定位对象方法 "Spreadsheet::ParseExcel::Workbook"'

javascript - 为什么 jquery 不返回 DOM 的最后一个条目?

javascript - 如何删除 JavaScript 中创建的元素?

javascript - 遍历 DOM 获取字符串有时会正确返回