【问题标题】:Using Python mechanize on specific form with javascript使用 javascript 在特定表单上使用 Python 机械化
【发布时间】:2012-03-17 19:19:58
【问题描述】:

我正在尝试使用 Python mechanize 模块通过此表单检索数据:http://archive.stsci.edu/kepler/data_search/search.php?form=fuf

我遇到的问题是左下角的“输出列”区域,它使用 javascript 来指定输出格式。我希望能够选择一个特定的项目列表,通常可以使用周围的 javascript 按钮来选择。

我是机械化新手,好久没研究过javascript了。我一直在查看负责任的javascript,但不确定该怎么做。有小费吗?

更具体地说:有没有办法使用 mechanize 来修改列表中的元素?

【问题讨论】:

    标签: javascript python screen-scraping mechanize


    【解决方案1】:

    我建议直接对那个表单进行 POST 调用,而不是通过mechanize 以某种方式与表单交互。以下是我将如何使用mechanize

    import mechanize
    from urllib import urlencode
    opener = mechanize.build_opener()
    data = {"resolver":"NED","radius":"0.02","equinox":"J2000","ktc_target_type[]":"LC","ktc_target_type[]":"SC","extra_column_name_1":"ktc_kepler_id","extra_column_value_1":"","extra_column_name_2":"ktc_kepler_id","extra_column_value_2":"","extra_column_name_3":"ktc_kepler_id","extra_column_value_3":"","extra_column_name_4":"ktc_kepler_id","extra_column_value_4":"","selectedColumnsCsv":"Mark,ktc_kepler_id,ktc_investigation_id,sci_data_set_name,ktc_target_type","selectedColumnsList[]":"ktc_target_type","availableColumns":"Mark","ordercolumn1":"ang_sep","ordercolumn2":"ktc_kepler_id","ordercolumn3":"","coordformat":"sex","outputformat":"HTML_Table","max_records":"1001","max_rpp":"100","action":"Search"}
    d = urlencode(data)
    url = 'http://archive.stsci.edu/kepler/data_search/search.php'
    stuff = opener.open(url,d)
    info_i_want = stuff.read()
    

    基本上,将搜索内容放入字典中,向服务器发出 POST 调用,然后阅读您的响应。

    【讨论】:

    • 感谢您的回答。我一直在考虑通过 POST 来做这件事,但对此一无所知,因此不愿尝试;不过,您的代码效果很好。但是,文件上传呢?我如何通过 urlencode 做到这一点?
    • 另外,我发现使用 mechanize 我可以简单地编辑隐藏的 selectedColumnsCsv 元素的内容来选择输出列;我曾假设它会被 javascript preprocess() 函数清除干净。在这种情况下,使用 POST 而不是 mechanize 有什么优势吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多