如何最好地代表第三方屏蔽受密码保护的网站?

时间:2009-04-29 06:29:17

标签: screen-scraping usability password-protection

我想写一个分析你的梦幻棒球队的程序,并通知你建议的行动,可能每天多次。问题是,你不是在我的网站上玩幻想棒球,你是在雅虎,或cbs,或espn等玩。

在大多数这些网站上,幻想团队和联盟都不公开,所以你必须登录并成为联盟成员才能看到联盟中的球队。

我需要的只是每个要发送到我的服务器的网站上的团队页面的简单html,然后我可以在那里解析和分析文件并发送用户通知。

问题是我需要用户名/密码组合来轻松地将这些数据发送到我的服务器 我需要它时,我认为会有很多人不想委托他们的yahoo / espn / cbs密码给我。

我想出了几种解决这个问题的方法:

  1. 最明显的方法是询问他们的团队所在网站的凭据。然后我可以通过编程方式登录并请求我需要的数据。我猜很多人会很乐意给我他们的证书,其中一些人并不那么认真。

  2. 编写桌面客户端,然后用户下载该客户端。客户端需要他们的凭据,但它基本上可以完成基于服务器的版本所做的事情,登录,请求页面,并将页面发送回我的服务器。不同的是,他们的密码永远不需要离开他们的桌面。他们的计算机需要打开,并且此程序正在运行此方法。

  3. 编写浏览器加载项,导航到我需要的页面,使用从以前登录中保存的cookie登录到站点,然后将页面发送回我的服务器。这并不需要我的软件要求他们的密码,但如果cookie过期,我就会被软管,而且我对浏览器插件的了解不多。

  4. 我确信还有其他选择,但这些是我到目前为止所提出的。

    我有两个问题: 1.此类任务的其他可能性有哪些? 我是否过高估计人们不愿意给我他们的雅虎(例如)密码?选项(1)是明显的选择吗?

    在评论中建议我尝试雅虎管道,这看起来像一个很有前途的建议,所以我稍微探讨了一下。现在看this,我认为这不是一个选择。所以,看起来我会选择1。

3 个答案:

答案 0 :(得分:2)

可能使用(例如)yahoo管道来完成一个更复杂的答案。

假设您创建了一个管道,提示用户输入凭据并为其提供包含其已删除数据的URL。他们在他们的网站中输入此URL,而不必直接提供他们的凭据。更好的是,对于注重安全性的人来说,在输入任何信息之前,可以检查管道实际上在做什么。

缺点是复杂性增加(以及你必须编写和维护管道)。话虽如此,您可以直接从您的网站提供已发布管道的链接,以使事情变得简单。

答案 1 :(得分:2)

这是我几年前想要做同样事情时遇到的问题。我们的网站是http://benchcoach.com,我们考虑的选项如下:

原文我们考虑获取用户的凭据并登录。然后我们会登录并抓住他们的联赛和球队信息。问题是,在阅读了几个不同的服务条款之后,这肯定会违反服务条款。最重要的是,雅虎!肯定是我们正在考虑的网站之一,他们的用户有电子邮件(我们可以访问敏感数据),雅虎!钱包。此外,雅虎/ ESPN / CBS通过IP地址阻止我们的程序化登录也是微不足道的。

我们确定的解决方案(不是百分之百满意,但似乎确实有效)是要求我们的用户安装一个书签(如美味,digg或reddit),这会将当前的html页面发布到我们的服务器上,我们可以在那里解析数据并加载我们的数据库。如果他们仍然登录到他们的Yahoo / ESPN / CBS帐户,我们会将他们直接指向这些页面,否则这些网站会提示进行身份验证。再次单击书签,会将页面发布到我们的服务器。

这种方法的优点是我们从未收集过任何人的证书,因此任何对安全的担忧都会得到缓解。其次,雅虎/ ESPN / CBS无法阻止访问我们的服务,因为我们永远不会直接连接到他们的服务器,而是用户的浏览器会将浏览器的内容发布到我们的服务器。

这样做的问题是,只需2次点击即可将网页发布到我们的网站。对于头对头联赛,我们需要3-4页,因此我们的用户需要6-8次点击才能将他们的联赛同步到我们的服务器。我们仍在为此寻找选择。

一个重要的注意事项是,我在一年前的一次会议上遇到了Yahoo Fantasy Football网站的产品经理。我们谈到了我们如何获取雅虎数据,他确认获取凭据会违反他们的服务条款,他们可能会阻止我们。虽然我认为他们不会这样做,但是如果让他们通过关闭他们的帐户阻止我们的网站和小便用户,那么就很难投入时间和精力来开发它。

答案 2 :(得分:1)

选项1是显而易见的选择。信任您网站的人将提供详细信息。在屏幕抓取时,没有其他方法可以登录其他网站。