【问题标题】:Passing Data to a Python Web Crawler from PHP Script从 PHP 脚本向 Python Web Crawler 传递数据
【发布时间】:2011-07-26 20:29:14
【问题描述】:

我有一个 python 爬虫每隔几分钟爬几个网页。我现在正在尝试实现一个可以通过网络访问的用户界面,并显示爬虫获取的数据。我将使用 php/html 作为界面。无论如何,用户界面需要某种按钮来触发爬虫立即爬取特定网站(而不是等待下一次爬取迭代)。

现在,有没有办法将数据从 php 脚本发送到正在运行的 python 脚本?我正在考虑标准输入/输出,但找不到可以做到这一点的方法(从一个进程写入另一个进程标准输入)。然后我在考虑使用一个共享文件,php写入和python读取。但是我需要一些方法让 python 脚本知道,新数据已写入文件,以及让 php 脚本知道爬虫何时完成任务的方法。另一种方法是套接字 - 但我认为这有点过头了,而且不是尽可能简单。

您有什么建议可以让一切尽可能简单,但仍然允许我将数据从 php 脚本发送到正在运行的 python 进程?

提前感谢您的任何想法!

编辑:需要注意的是,爬虫将获取的数据保存到sql数据库中,php可以访问。所以将数据从python爬虫传递给php脚本是没有问题的。反之亦然。

【问题讨论】:

    标签: php python stdout stdin web-crawler


    【解决方案1】:

    消除使用不同语言的依赖关系的最佳方法是使用消息队列库(如 rabbitMQ 或 ActiveMQ)

    通过使用它,您可以将直接消息从 php 发送到 python,反之亦然...

    如果您想要一个简单的出路,您需要修改您的 python 脚本(更多关于 fabrik 所说的行)以轮询数据库(或文件)以查找任何新作业......并在找到时处理它...

    【讨论】:

      【解决方案2】:

      由于我不太了解 python 的工作原理,所以把它当作一个疯狂的想法。

      • 在您的服务器上创建一个可由 python 和 PHP 访问的 XML
      • 在 PHP 端,您可以使用 processed=false 标志向此 XML 中插入有关新 url 的新节点
      • Python 来查看未处理的任务,然后获取数据并将源放到您的数据库中
      • 成功抓取后,切换processed标志
      • 下次 PHP 接触此 XML 时,删除具有processed=true 属性的节点

      希望它对您有所帮助。

      【讨论】:

      • 虽然这将是一个可行的解决方法,但它不能解决两个问题:1) 如果 while 更改了,爬虫需要每隔几秒检查一次。 2) php 脚本必须每隔几秒读取一次并检查标志是否设置为 true。
      • @Philipp 如果您喜欢使用 cron,您可以每分钟/秒运行一次 Python 脚本。
      • 感谢您的 cmets。我最终使用了套接字。爬虫现在有一个专用线程监听特定端口。我现在可以使用 php 套接字使用 web 界面发送命令。虽然这不是我最喜欢的解决方案,但它确实有效。
      【解决方案3】:

      我有使用标准 XML-RPC Python 库提供简单 RPC 接口的良好经验。 您需要做的就是在 Python 脚本中启动另一个线程,该线程将处理来自 PHP 代码的 XML-RPC 请求。 PHP 有相当成熟的 XML-RPC 支持,http://phpxmlrpc.sourceforge.net/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-03
        • 2017-01-22
        • 2016-03-20
        • 1970-01-01
        • 2015-09-13
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        相关资源
        最近更新 更多