基于网络的Python机器人
我正在尝试写一个基于Python的网络机器人,这个机器人可以读取和理解一个HTML页面,然后执行一个点击事件(onClick),并获取执行后生成的新HTML页面。我已经可以读取HTML页面,也能确定点击命令需要调用哪些函数,但我不知道怎么去执行这些函数,或者怎么获取执行后的HTML代码。
有没有什么建议?
7 个回答
你可以尝试使用V8,
V8是谷歌开发的一个开源、高性能的JavaScript引擎。它是用C++写的,主要用于谷歌的开源浏览器——谷歌浏览器(Chrome)。
如果想从Python
中调用它,可能会有点复杂,因为需要一个框架来提供DOM(文档对象模型)。Pyjamas
有一个实验性项目,叫做Pyjamas Desktop,它提供了V8
与JavaScript
执行的集成。
Pyv8
是一个实验性的Python与V8的绑定库,还有一个Python到JavaScript的编译器。
显然,Python不会帮你理解JavaScript(不过可能有一些模块可以做到这一点)。我想你需要把JavaScript的指令转换成Python能理解的相应操作。
我觉得ElementTree或者BeautifulSoup是理解HTML结构的不错起点。
我知道的在Python中可以用来处理JavaScript的工具就是python-spidermonkey,不过我自己从来没用过。
如果用Jython的话,你可以(滥用)HttpUnit。
编辑:我忘了提到你还可以用Scrapy。它通过Spidermonkey支持JavaScript,甚至可以用Firefox来抓取网页。
编辑 2:最近,我发现自己越来越多地使用浏览器自动化来完成这些任务,这要感谢一些很棒的库。QtWebKit提供了对WebKit浏览器的完全访问,可以通过语言绑定在Python中使用(比如PySide或PyQt)。似乎还有类似的库和绑定可以用于Gtk+,不过我还没尝试过。Selenium WebDriver API也很好用,并且有一个活跃的社区。