【问题标题】:Python Web-based Bot基于 Python 网络的机器人
【发布时间】:2010-11-05 10:02:54
【问题描述】:

我正在尝试编写一个基于 Python 的 Web Bot,它可以读取和解释 HTML 页面,然后执行 onClick 函数并接收生成的新 HTML 页面。我已经可以阅读 HTML 页面,并且可以确定要由 onClick 命令调用的函数,但我不知道如何执行这些函数或如何接收生成的 HTML 代码。

有什么想法吗?

【问题讨论】:

    标签: python html bots


    【解决方案1】:

    据我所知,Python 中用于 Javascript 的唯一工具是 python-spidermonkey。不过我没用过。

    使用 Jython,您可以 (ab-) 使用 HttpUnit

    编辑:忘记了可以使用Scrapy。它通过 Spidermonkey 支持 Javascript,你甚至可以使用 Firefox 来爬网。

    编辑 2:最近,由于一些优秀的库,我发现自己越来越多地使用浏览器自动化来完成此类任务。 QtWebKit 提供对 WebKit 浏览器的完全访问权限,由于语言绑定(PySidePyQt),它可以在 Python 中使用。 Gtk+ 似乎有类似的库和绑定,我没有尝试过。 Selenium WebDriver API 也很有效,并且拥有一个活跃的社区。​​p>

    【讨论】:

    • 因提到scrapy而被投票赞成。没有意识到这一点。看起来很有希望。
    【解决方案2】:

    很明显,python 不会为您解释 JS(尽管可能有模块可以)。我想您需要将 JS 指令转换为 Python 中的等效转换。

    我认为 ElementTree 或 BeautifulSoup 将是解释 HTML 结构的良好起点。

    【讨论】:

      【解决方案3】:

      要执行 JavaScript,除了呈现之外,您需要执行完整 Web 浏览器所做的大部分工作。特别是,除了 Python 解释器之外,您还需要一个 JavaScript 解释器。

      一个起点可能是python-spidermonkey。根据特定的 JavaScript,除了提供 XmlHttpRequest 实现之外,您可能还必须为蜘蛛猴提供良好的 DOM API。

      【讨论】:

        【解决方案4】:

        您可以尝试利用V8

        V8 是 Google 的开源、高性能 JavaScript 引擎。它是用 C++ 编写的,用于 Google 的开源浏览器 Google Chrome。

        如果没有提供 DOM 的框架,从 Python 调用它可能并不简单。 Pyjamas 有一个实验项目Pyjamas Desktop,为Javascript 执行提供V8 集成。

        Pyv8 是一个实验性的 python v8 绑定和一个 python-javascript 编译器。

        【讨论】:

          【解决方案5】:

          对于浏览器部分,您可能需要查看 Mechanize,它基本上是一个作为 Python 库实现的网络浏览器。 http://pypi.python.org/pypi/mechanize/0.1.11 但如前所述,文本 n onClick 是 Javascript,您需要 spidermonkey。

          如果你可以在机械化中为蜘蛛猴做一个通用的支持,我相信很多人会非常高兴。 ;)

          机械化可能有点过头了,也许你只是想找到 HTML 的特定部分,然后 lxml 和 BeautifulSoup 都可以很好地工作。

          【讨论】:

            【解决方案6】:

            您为什么不直接嗅探 onclick 事件后发送的内容并用您的机器人复制它?

            【讨论】:

              【解决方案7】:

              对于网络自动化,您可以查看“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 ^_^
              

              文档位于:https://webbot.readthedocs.io

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-11-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-04-20
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多