可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据
2010-01-20 00:00:00 来源:WEB开发网使用基本的 Python 模块,可以 编写脚本来与 Web 站点交互,但是如果没有必要的话,那么您就不希望这样做。Python 2.x 中的模块 urllib 和 urllib2,以及 Python 3.0 中的统一的 urllib.* 子包,可以在 URL 的末尾获取资源。然而,当您希望与 Web 页面中找到的内容进行某种比较复杂的交互时,您需要使用 mechanize 库。
在自动化 Web scrap 或用户与 Web 站点的交互模拟中,最大的困难之一就是服务器使用 cookies 跟踪会话进度。显然,cookies 是 HTTP 头部的一部分,在 urllib 打开资源时会自然显示出来。而且,标准模块 Cookie(Python 3 中的 http.cookie)和 cookielib(Python 3 中的 http.cookiejar)有助于在比原始的文本处理更高的层次上处理这些头部。即使如此,在这个层次上执行处理也非常的繁琐。mechanize 库将这种处理提升到一个更高程度的抽象并使您的脚本 — 或交互性 Python shell — 表现出非常类似实际 Web 浏览器的行为。
Python 的 mechanize 受到 Perl 的 WWW:Mechanize 的启发,后者具有类似的一组功能。当然,作为长期的 Python 支持者,我认为 mechanize 更健壮,它看上去似乎继承了两种语言的通用模式。
mechanize 的一个亲密伙伴是同样出色的 Beautiful Soup 库。这是一个非常神奇的 “粗糙的解析器”,用于解析实际 Web 页面中包含的有效 HTML。您不需要 将 Beautiful Soup 用于 mechanize,反之亦然,但是多半情况下,当您与 “实际存在的 Web” 交互时,您将希望同时使用这两种工具。
一个实际示例
我曾在多个编程项目中使用过 mechanize。最近一个项目是从一个流行的 Web 站点中收集匹配某种条件的名称的列表。该站点提供了一些搜索工具,但是没有提供任何正式的 API 来执行此类搜索。虽然访问者可能能够更明确地猜出我过去在做什么,但我将修改给出的代码的细节,以避免暴露有关被 scrap 的站点或我的客户机的过多信息。一般情况下,我给出的代码对于类似任务是通用的。
更多精彩
赞助商链接