使用Python的机械化刮刮ASPX表单

时间:2017-01-30 15:19:12

标签: python asp.net mechanize

昨天,我试图从this webpage(西班牙马德里几家医院等候名单上的人数界面)中搜索数据。表格非常简单:一个选择医院,然后填写不同的服务(皮肤病学,内分泌学等)和日期(目前只有2016年12月)。

我正在阅读HTML代码并尝试编写一个非常简单的Python脚本来完成自动下载所有数据的任务。完整代码是in this github repository,但我将逐步介绍它。

首先,我加载页面并获取对主窗体的引用:

import mechanize

# Config vars
URL = "https://servicioselectronicos.sanidadmadrid.org/LEQ/Consulta.aspx"

if __name__ == "__main__":

    br = mechanize.Browser()
    br.open(URL)
    response = br.response()
    br.select_form('aspnetForm')
    form = br.form

此时,form包含对文档中主窗体的引用。然后我选择列表中的第二个医院(可能是任何一个)并提交它(原始代码执行_doPostBack以填写其余的下拉项目):

# Select the second hospital and re-submit in order to have the list of
# services available in that hospital
form.controls[2].items[1].selected = True
request = br.submit()
# We can now submit with the desired selection
br.select_form('aspnetForm')
form = br.form

现在,form是对填写表单的引用,包含该特定医院可用的服务列表和日期。然后我选择其中几个字段并重新提交:

form.controls[2].items[1].selected = True
form.controls[3].items[1].selected = True
form.controls[4].items[0].selected = True
req_data = form.click_request_data()
response = br.submit()

然而,这是我真的很困惑,response不包含所需的结果(等待名单中的人数)。 HTML代码仅包含填写的表单,其中包含我选择的值,但没有其他内容。

我知道这可以废弃。我已经看到另一个用R编写的解决方案,它使用selenium作为浏览器引擎。我是否遗漏了某些东西,或者这个特殊的例子是不能简单地使用mechanize来删除的东西,但是某种程度上需要更复杂的东西?

0 个答案:

没有答案