4

虽然从我所看到的情况来看,HTML 抓取有很好的文档记录,并且我理解它的概念和实现,但从隐藏在身份验证表单后面的内容中抓取的最佳方法是什么。我指的是从我合法有权访问的内容中抓取,因此我正在寻找一种自动提交登录数据的方法。

我能想到的只是设置一个代理,从手动登录中捕获吞吐量,然后设置一个脚本来欺骗该吞吐量,作为 HTML 抓取执行的一部分。就语言而言,它可能会在 Perl 中完成。

有没有人有这方面的经验,或者只是一般的想法?

编辑 这已经回答过,但使用.NET。虽然它验证了我认为应该如何完成,但是否有人有 Perl 脚本来执行此操作?

4

4 回答 4

4

查看 Perl WWW::Mechanize库 - 它建立在 LWP 之上,提供工具来执行您所指的那种交互,并且它可以在您使用 cookie 时维护状态!

WWW::Mechanize,或简称 Mech,可帮助您自动化与网站的交互。它支持执行一系列页面获取,包括以下链接和提交表单。解析每个获取的页面并提取其链接和表单。可以选择链接或表单,可以填写表单字段并获取下一页。Mech 还存储您访问过的 URL 的历史记录,可以查询和重新访问。

于 2008-10-10T08:06:36.283 回答
3

perl 中的LWP 模块应该为您提供所需的内容。

这里有一篇很好的文章,它讨论了启用 cookie 和其他身份验证方法以使您获得授权登录并允许您的屏幕抓取让您进入登录墙。

于 2008-10-10T07:57:04.350 回答
2

有两种经常使用的身份验证类型。基于 HTTP 的身份验证和基于表单的身份验证。

对于使用基于 HTTP 的身份验证的站点,您基本上将用户名和密码作为您向服务器发出的每个 HTTP 请求的一部分发送。

对于进行基于表单的身份验证的站点,您通常需要访问登录页面,接受并存储 cookie,然后将 cookie 信息与您发出的任何 HTTP 请求一起提交。

当然,也有像 stackoverflow 这样的网站使用 openid 或 saml 等外部身份验证进行身份验证。这些对于报废处理更复杂。通常你想找一个库来处理它们。

于 2008-10-10T07:58:03.303 回答
0

是的,如果不是 asp.net,您可以将其他库用于您自己的语言。

例如,在 Java 中,您可以使用httpclienthttpunit(甚至可以处理一些基本的 Javascript)。

于 2008-10-10T07:53:16.543 回答