我有兴趣看看请求是否可以处理我在Mechanize中主要执行的一些任务。在
Mechanize可以很容易地处理填写表单和提交表单,我很难在请求中做同样的事情。在
例如
import mechanize
br = mechanize.Browser()
url = "https://www.euronext.com/en/data/download?ml=nyx_pd_stocks&cmd=default&formKey=nyx_pd_filter_values%3A18d1ee939a63d459d9a2a3b07b8837a7"
br.open(url)
br.select_form(nr=1)
br.form['format']=['2']
br.form['date_format']=['2']
response = br.submit().read()
等效请求是否不是:
^{pr2}$是的请求.post不提交表单下载页面上嵌入的CSV?在
此外,如需了解更多信息,页面上的表单如下所示:
for form in br.forms():
print form
<POST https://www.euronext.com/en/data/download?ml=nyx_pd_stocks&cmd=default&formKey=nyx_pd_filter_values%3A18d1ee939a63d459d9a2a3b07b8837a7 application/x-www-form-urlencoded
<TextControl(search_block_form=)>
<SubmitControl(op=Search) (readonly)>
<RadioControl(search_type=[*quote, site])>
<HiddenControl(form_build_id=form-af2eb21e9b6448ffca4e358d0b52f499) (readonly)>
<HiddenControl(form_id=search_block_form) (readonly)>
<HiddenControl(search_target=search_instruments) (readonly)>
<HiddenControl(search_language=&lan=) (readonly)>>
<POST https://www.euronext.com/en/data/download?ml=nyx_pd_stocks&cmd=default&formKey=nyx_pd_filter_values%3A18d1ee939a63d459d9a2a3b07b8837a7 application/x-www-form-urlencoded
<RadioControl(format=[*1, 2, 3])>
<RadioControl(layout=[*2, 1])>
<RadioControl(decimal_separator=[*1, 2])>
<RadioControl(date_format=[*1, 2])>
<SubmitControl(op=Go) (readonly)>
<SubmitControl(op=Cancel) (readonly)>
<HiddenControl(form_build_id=form-37e81285a4dbf60e091037f904bac2eb) (readonly)>
<HiddenControl(form_id=nyx_download_form) (readonly)>>
requests
与Mechanize不同。在Mechanize加载实际的HTML表单并对其进行解析,允许您为表单中的各个元素填充值。然后,当您要求Mechanize提交表单时,它将使用表单中的所有信息来向服务器生成一个有效的请求。这包括没有为其提供新值的任何表单元素,如果存在,则使用默认值。这包括浏览器中不可见的任何隐藏表单元素。在
使用类似robobrowser的项目;它包装
requests
和{a2}来加载网页、解析表单元素、帮助您填写这些元素并再次提交它们。在如果您想使用仅请求,则需要确保您发布了表单定义的所有字段。这意味着您需要查看}元素。服务器也可能希望在HTTP请求中包含附加信息,例如cookies或Referer(sic)报头。在
method
属性(默认为GET
)、action
属性(默认为当前URL),以及所有input
、select
、textarea
和{例如,您打印的Mechanize信息表明它已经从表单中解析了多个字段,而您没有为这些字段提供值。所讨论的表单还包含一个隐藏的输入字段,例如
form_build_id
,服务器可能依赖它。Mechanize还将捕获与原始表单请求一起发送的任何cookie,服务器也可能需要这些cookie来接受请求。robobrowser会考虑相同的上下文。在可以使用
requests
和BeautifulSoup
来完成操作:相关问题 更多 >
编程相关推荐