Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript在特定表单上使用Python mechanize_Javascript_Python_Screen Scraping_Mechanize - Fatal编程技术网

使用javascript在特定表单上使用Python mechanize

使用javascript在特定表单上使用Python mechanize,javascript,python,screen-scraping,mechanize,Javascript,Python,Screen Scraping,Mechanize,我尝试使用Python mechanize模块通过以下表单检索数据: 我遇到的问题是左下角的“输出列”区域,它使用javascript指定输出格式。我希望能够选择一个特定的项目列表,通常通过周围的javascript按钮来选择 我是机械化新手,很久没有看过javascript了。我一直在查看负责任的javascript,但不确定该怎么做。有什么建议吗 更具体地说:有没有一种方法可以使用mechanize来修改列表中的元素?我建议直接对该表单进行POST调用,而不是通过mechanize以某种方式

我尝试使用Python mechanize模块通过以下表单检索数据:

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

我是机械化新手,很久没有看过javascript了。我一直在查看负责任的javascript,但不确定该怎么做。有什么建议吗


更具体地说:有没有一种方法可以使用mechanize来修改列表中的元素?

我建议直接对该表单进行POST调用,而不是通过
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来做这件事,但我对此一无所知,所以不愿意尝试;不过,您的代码工作得很好。但是文件上传呢?我如何通过urlencode做到这一点?同时,我发现使用mechanize,我可以简单地编辑隐藏的selectedColumnsCsv元素的内容,以选择输出列;我假设它会被javascript preprocess()函数清除。在这种情况下,使用POST比机械化有什么优势吗?