【问题标题】:Scraping ASP.NET with Python and urllib2使用 Python 和 urllib2 抓取 ASP.NET
【发布时间】:2011-08-23 19:32:37
【问题描述】:

我一直在尝试(不成功,我可能会添加)使用 Python 和 urllib/urllib2 抓取使用 Microsoft 堆栈(ASP.NET、C#、IIS)创建的网站。我也在使用 cookielib 来管理 cookie。花了很长时间在 Chrome 中分析网站并检查标题后,我一直无法想出一个有效的登录解决方案。目前,为了让它在最基本的层面上工作,我已经使用所有适当的表单数据(甚至视图状态等)对编码的 URL 字符串进行硬编码。我也传递了有效的标题。

我目前收到的回复是:

29|pageRedirect||/?aspxerrorpath=/default.aspx|

我不确定如何解释上述内容。此外,我还广泛研究了用于处理登录字段的客户端代码。

工作原理如下:您输入您的用户名/密码并点击“登录”按钮。按下 Enter 键也模拟了此按钮按下。输入字段不在表单中。相反,在所述登录按钮上有一些 onClick 事件(其中大部分只是为了美观),但有一个问题处理验证。在将其发送到服务器端之前,它会进行一些基本检查。根据网络资源,它肯定似乎在使用 .NET AJAX。

正常登录本网站时,您请求域作为 POST,其中包含您的用户名和密码等表单数据。然后,会进行某种 URL 重写或重定向,将您带到 url.com/twitter 的内容页面。当尝试直接访问 url.com/twitter 时,它会将您重定向到主页。

请注意,我已决定将相关 URL 保留在外。我没有做任何恶意的事情,只是每隔合理的时间增量自动执行一次非常单调的检查(我熟悉富有同情心的屏幕抓取)。但是,如果将我的 StackOverflow 帐户与该帐户关联起来并不能使域所有者满意,那将是微不足道的。

我的问题是: 过去我能够成功登录并自动化服务,但这些服务都不是基于 .NET 的。有什么不同的事情我应该做的,或者我遗漏了什么?

【问题讨论】:

    标签: asp.net python asp.net-ajax screen-scraping urllib2


    【解决方案1】:

    对于未来可能处于类似困境的其他人

    我只想指出,我在 Chrome 中使用 Greasemonkey 用户脚本来完成我所有的抓取和自动化操作取得了很大的成功。我发现它比 Python + urllib2 容易得多(至少对于这种特殊情况)。用户脚本是用 100% Javascript 编写的。

    【讨论】:

      【解决方案2】:

      在抓取 Web 应用程序时,我使用:

      1) WireShark ...或...

      2) 日志代理服务器(记录标头和有效负载)

      然后,我将实际应用程序的功能(在本例中为您的浏览器如何与站点交互)与抓取工具的日志进行比较。解决这些差异将为您带来可行的解决方案。

      【讨论】:

      • 是否总是可以通过 urllib 之类的 HTTP 库进行自动登录?换句话说,是否存在 Web 应用程序的编码方式阻止无法绕过的自动登录的情况?我在身份验证后尝试抓取的网站已经采取了广泛的措施来阻止机器人(但在这种情况下,我认为“机器人”会以重复的垃圾邮件行为的形式对网站造成损害)。我打算抓取网站作为过滤器,并在继续操作之前寻找某些标准。假设... 1 次检查/分钟。
      • 只要您可以自己编写/覆盖所有标头,浏览器就没有什么是您不能模仿的。
      猜你喜欢
      • 2014-06-03
      • 1970-01-01
      • 2016-02-29
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2013-08-20
      • 2013-07-15
      相关资源
      最近更新 更多