2012-03-17 32 views
1

我试图使用Python机械化模块通过这样的形式来检索数据:http://archive.stsci.edu/kepler/data_search/search.php?form=fuf使用Python的具体形式机械化与JavaScript

我遇到的麻烦的事情是“输出列”区域在较低左边,它使用javascript来指定输出格式。我希望能够选择特定的项目列表,通常会使用周围的javascript按钮进行选择。

我是新来机械化,并没有看过JavaScript的年龄。我一直在浏览负责任的JavaScript,但我不确定要做什么。有小费吗?

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

回答

2

我建议直接对该表单进行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调用服务器,并看到您的回复。

+0

感谢您的回答。我一直在考虑通过POST这样做,但没有任何知识,所以不愿意尝试;尽管如此,你的代码很好用。但是,文件上传呢?我如何通过urlencode做到这一点? – StrangeQuirk 2012-03-18 03:11:29

+0

此外,我已经发现,与机械化我可以简单地编辑隐藏selectedColumnsCsv元素的内容来选择输出列;我曾假设它会被javascript preprocess()函数擦干净。在这种情况下,使用POST over机械化有什么好处? – StrangeQuirk 2012-03-18 03:48:31