【发布时间】:2010-11-05 10:02:54
【问题描述】:
我正在尝试编写一个基于 Python 的 Web Bot,它可以读取和解释 HTML 页面,然后执行 onClick 函数并接收生成的新 HTML 页面。我已经可以阅读 HTML 页面,并且可以确定要由 onClick 命令调用的函数,但我不知道如何执行这些函数或如何接收生成的 HTML 代码。
有什么想法吗?
【问题讨论】:
我正在尝试编写一个基于 Python 的 Web Bot,它可以读取和解释 HTML 页面,然后执行 onClick 函数并接收生成的新 HTML 页面。我已经可以阅读 HTML 页面,并且可以确定要由 onClick 命令调用的函数,但我不知道如何执行这些函数或如何接收生成的 HTML 代码。
有什么想法吗?
【问题讨论】:
据我所知,Python 中用于 Javascript 的唯一工具是 python-spidermonkey。不过我没用过。
使用 Jython,您可以 (ab-) 使用 HttpUnit。
编辑:忘记了可以使用Scrapy。它通过 Spidermonkey 支持 Javascript,你甚至可以使用 Firefox 来爬网。
编辑 2:最近,由于一些优秀的库,我发现自己越来越多地使用浏览器自动化来完成此类任务。 QtWebKit 提供对 WebKit 浏览器的完全访问权限,由于语言绑定(PySide 或 PyQt),它可以在 Python 中使用。 Gtk+ 似乎有类似的库和绑定,我没有尝试过。 Selenium WebDriver API 也很有效,并且拥有一个活跃的社区。p>
【讨论】:
很明显,python 不会为您解释 JS(尽管可能有模块可以)。我想您需要将 JS 指令转换为 Python 中的等效转换。
我认为 ElementTree 或 BeautifulSoup 将是解释 HTML 结构的良好起点。
【讨论】:
要执行 JavaScript,除了呈现之外,您需要执行完整 Web 浏览器所做的大部分工作。特别是,除了 Python 解释器之外,您还需要一个 JavaScript 解释器。
一个起点可能是python-spidermonkey。根据特定的 JavaScript,除了提供 XmlHttpRequest 实现之外,您可能还必须为蜘蛛猴提供良好的 DOM API。
【讨论】:
您可以尝试利用V8,
V8 是 Google 的开源、高性能 JavaScript 引擎。它是用 C++ 编写的,用于 Google 的开源浏览器 Google Chrome。
如果没有提供 DOM 的框架,从 Python 调用它可能并不简单。
Pyjamas 有一个实验项目Pyjamas Desktop,为Javascript 执行提供V8 集成。
Pyv8 是一个实验性的 python v8 绑定和一个 python-javascript 编译器。
【讨论】:
对于浏览器部分,您可能需要查看 Mechanize,它基本上是一个作为 Python 库实现的网络浏览器。 http://pypi.python.org/pypi/mechanize/0.1.11 但如前所述,文本 n onClick 是 Javascript,您需要 spidermonkey。
如果你可以在机械化中为蜘蛛猴做一个通用的支持,我相信很多人会非常高兴。 ;)
机械化可能有点过头了,也许你只是想找到 HTML 的特定部分,然后 lxml 和 BeautifulSoup 都可以很好地工作。
【讨论】:
您为什么不直接嗅探 onclick 事件后发送的内容并用您的机器人复制它?
【讨论】:
对于网络自动化,您可以查看“webbot”库。它使自动化变得非常简单且无痛。
webbot 甚至适用于 id 和类名动态变化的网页,并且比 selenium 和 mechanize 具有更多的方法和功能。
这是 webbot 的 sn-p
from webbot import Browser
web = Browser()
web.go_to('google.com')
web.click('Sign in')
web.type('mymail@gmail.com' , into='Email')
web.click('NEXT' , tag='span')
web.type('mypassword' , into='Password' , id='passwordFieldId') # specific selection
web.click('NEXT' , tag='span') # you are logged in ^_^
【讨论】: