2009-07-15 50 views
1

我想http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx此页面上自动执行数据的归档,并上传到数据库中一个javascript回发。继使用COM + IE自动保存文本文件

我一直在使用Python和win32com(后面的企业代理,所以没有直接的网络访问,所以我使用的IE浏览器这样做),在其他页面做到这一点。我的问题是,反正是有提取并保存单击底部的“单击此处下载数据”链接时返回CSV数据?这个链接是一个JavaScript回传,并且比将页面重新格式化为CSV容易得多。

。当然,如果可以提出一个更简单的选择,我不一定会使用Python。

感谢

回答

1

这里有一个更好的方式,使用mechanize库。


import mechanize 

b = mechanize.Browser() 
b.set_proxies({'http': 'yourproxy.corporation.com:3128' }) 

b.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')] 
b.open("http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx") 

b.select_form(name="form1") 
b.form.find_control(name='__EVENTTARGET').readonly = False 
b.form['__EVENTTARGET'] = 'a1' 

print b.submit().read() 

说明了如何指定机械化应该使用代理服务器(也可以使用普通urllib)。还要注意如何模拟ASP.NET的javascript回传。

编辑:

如果您的代理服务器使用NTLM身份验证,这可能是问题。 AFAIK urllib2不处理NTLM身份验证。你可以试试NTLM Authorization Proxy Server。从readme file


什么是'NTLM授权代理服务器'?

“NTLM授权代理服务器”是代理类软件,将授权你 在MS代理服务器和Web服务器(ISS尤其是)使用MS专有NTLM 授权的方法,它可以改变一些价值客户的请求头 使得这些请求将看起来像由MS IE作出的。它是用Python 语言编写的。请参阅www.python.org。


+0

我试过了,使用b.set_proxies({ 'HTTP': '用户名:密码@访问代理服务器:80'})为我set_proxies字符串,但得到这个错误: HTTP错误407:需要代理身份验证(ISA Server需要授权才能完成请求,拒绝访问Web代理过滤器 这就是为什么我切换到使用COM + IE作为解决方法的原始原因,任何想法如何解决这个问题? 感谢您的帮助 – Brendan 2009-07-15 14:24:59