使用Python和urllib2抓取ASP.NET

2 投票
2 回答
1729 浏览
提问于 2025-04-16 17:29

我一直在尝试用Python和urllib/urllib2来抓取一个用微软技术栈(ASP.NET、C#、IIS)搭建的网站,但一直没有成功。我还在用cookielib来管理cookies。花了很长时间在Chrome上分析这个网站,查看请求头,但我还是没找到一个能成功登录的解决方案。目前,为了让它在最基本的层面上工作,我把编码后的URL字符串和所有必要的表单数据(甚至包括View State等)都硬编码了进去。我也传递了有效的请求头。

我现在收到的响应是:

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

我不太确定该如何理解上面的内容。此外,我也仔细查看了处理登录字段的客户端代码。

这是它的工作原理:你输入用户名和密码,然后点击“登录”按钮。按下回车键也会模拟这个按钮的点击。输入框并不在一个表单里,而是这个登录按钮上有几个onClick事件(大部分只是为了美观),但有一个是用来处理验证的。在发送到服务器之前,它会进行一些基本的检查。根据网络资源,它显然在使用.NET AJAX。

正常登录这个网站时,你会以POST的方式请求域名,并带上用户名和密码等表单数据。然后,会有某种URL重写或重定向,把你带到url.com/twitter的内容页面。当你直接访问url.com/twitter时,它会把你重定向到主页。

我应该提到的是,我决定不公开这个网址。我并没有做什么恶意的事情,只是想自动化一个非常单调的检查,每隔一段合理的时间就做一次(我对友好的屏幕抓取很熟悉)。不过,如果这让域名的拥有者不高兴,关联我的StackOverflow账号和那个账号是很简单的。

我的问题是: 我过去能够成功登录并自动化服务,但那些都不是基于.NET的。有没有什么不同的地方我应该注意,或者我可能遗漏了什么?

2 个回答

1

在抓取一个网页应用的时候,我通常会用以下两种工具:

1) WireShark ... 或者...

2) 一个记录代理服务器(它可以记录请求的头信息和内容)

然后,我会把真实应用的表现(比如,你的浏览器是如何和这个网站互动的)和抓取工具记录下来的信息进行对比。通过分析这些不同之处,你就能找到一个有效的解决方案。

2

对于将来可能遇到类似情况的其他人

我想说的是,我在Chrome浏览器中使用Greasemonkey用户脚本进行数据抓取和自动化方面取得了很大的成功。我发现这比用Python和urllib2要简单得多(至少在这个特定的情况下是这样)。这些用户脚本完全是用JavaScript编写的。

撰写回答