文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.3 使用 Mechanize 模块实现自动化表单处理
尽管我们的例子现在已经可以正常运行,但是可以发现每个表单都需要大量的工作和测试。我们可以使用Mechanize模块减轻这方面的工作,该模块提供了与表单交互的高级接口。Mechanize可以通过pip 命令进行安装。
<〓strong〓>pip install mechanize<〓/strong〓>
下面是使用Mechanize实现前面的人口数量增长示例的代码。
>>> import mechanize >>> br = mechanize.Browser() >>> br.open(LOGIN_URL) >>> br.select_form(nr=0) >>> br['email'] = LOGIN_EMAIL >>> br['password'] = LOGIN_PASSWORD >>> response = br.submit() >>> br.open(COUNTRY_URL) >>> br.select_form(nr=0) >>> br['population'] = str(int(br['population']) + 1) >>> br.submit()
这段代码比之前的例子要简单得多,因为我们不再需要管理cookie,而且访问表单输入框也更加容易。该脚本首先创建一个Mechanize浏览器对象,然后定位到登录URL,选择登录表单。我们可以直接向浏览器对象传递名称和值,来设置选定表单的输入框内容。调试时,我们可以直接调用br.form ,获取提交之前的表单状态,如下面的代码所示。
>>> print br.form <POST http://example.webscraping.com/user/login# application/ x-www-form-urlencoded <TextControl(email=)> <PasswordControl(password=)> <CheckboxControl(remember=[on])> <SubmitControl(<None>=Login) (readonly)> <SubmitButtonControl(<None>=) (readonly)> <HiddenControl(_next=/) (readonly)> <HiddenControl(_formkey=5fa268b4-0dfd-4e3f-a274-e73c6b7ce584) (readonly)> <HiddenControl(_formname=login) (readonly)>>
设定好登录表单的参数之后,调用br.submit() 提交选定的登录表单,然后脚本就处于登录状态了。现在,定位到国家的编辑页面,继续使用表单界面增加人口数量。需要注意的是,人口数量的输入框需要字符串类型的值,否则Mechanize会抛出TypeError 异常。
要检查上面的代码是否运行成功,可以使用Mechanize返回到国家表单,查询当前的人口数量,如下所示。
>>> br.open(COUNTRY_URL) >>> br.select_form(nr=0) >>> br['population'] 62348449
和预期一样,人口数量再次增加,现在是<strong>62 ,348 ,449</strong> 。
更多关于Mechanize模块的文档和示例可以通过其项目网站获取,网址为`http://wwwsearch.sourceforge.net/` `mechanize/。`
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论