我想自动执行此页上的数据的归档http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx ,并上传到数据库中。
我一直在使用Python和win32com(后面的企业代理,所以没有直接的网络访问,所以我使用的IE浏览器这样做),在其他页面做到这一点。 我的问题是,反正是有提取并保存单击底部的“单击此处下载数据”链接时返回CSV数据? 此链接是一个JavaScript回传,并且会比重新格式化页面本身为CSV容易得多。
。 当然,我并不致力于使用Python如果一个简单的替代方法可以建议?
谢谢
这里有一个更好的方式,使用机械化库。
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.NETs的JavaScript回传如何进行仿真。
编辑:
如果您的代理服务器使用NTLM身份验证,这可能是问题。 AFAIK的urllib2不处理NTLM身份验证。 你可以尝试NTLM授权代理服务器 。 从自述文件 :
什么是“NTLM授权代理服务器”?
“NTLM授权代理服务器”是代理类软件,将授权你在MS代理服务器和Web服务器(ISS尤其是)使用MS专有的NTLM认证方法,它可以在客户机的请求头改变一些值,使得这些请求看起来像由微软IE浏览器做出的。 这是写在Python语言。 见www.python.org。
文章来源: Following a javascript postback using COM + IE automation to save text file