从PHP脚本将数据传递给Python Web爬虫
我有一个python爬虫每隔几分钟爬一些网页。我现在试图实现通过Web访问的用户界面,并显示抓取工具获取的数据。我将使用php/html作为接口。无论如何,用户界面需要某种按钮,这会触发抓取工具立即抓取特定网站(而不是等待下一次抓取迭代)。从PHP脚本将数据传递给Python Web爬虫
现在,有没有办法将数据从php脚本发送到正在运行的python脚本?我正在考虑标准输入/输出,但是找不到这样做的方式(从一个进程写入另一个进程stdin)。然后我想着使用php写入和python读取的共享文件。但是后来我需要一些方法让python脚本知道,新的数据已经写入文件,并且让php脚本知道抓取工具何时完成任务。另一种方法是套接字 - 但是我认为,这将会有点过分,并且不是那么简单。
你有任何建议让一切尽可能简单,但仍然允许我从一个PHP脚本发送数据到正在运行的Python进程?
在此先感谢您的任何想法!
编辑:我应该注意到,爬虫将获取的数据保存到一个sql数据库中,php可以访问。所以将数据从python爬虫传递到php脚本是没有问题的。这是相反的。
因为我不太了解python的工作原理,所以只是把它当作疯狂的想法。
- 在服务器上创建一个XML它是由Python和PHP
- 在PHP端的访问,你可以插入新的节点,以这种XML有关的新网址用于
processed=false
标志 - 的Python来看看对于未处理任务,然后获取数据,并把源到你的数据库
- 成功抓取之后,切换
processed
标志 - 当下次PHP触摸这个XML,删除节点与
processed=true
属性
希望它能以某种方式帮助你。
最好的方法,以消除不同语言工作的依赖性是使用消息队列库(如RabbitMQ的ActiveMQ的或)
通过使用这个,你可以从PHP直接发送消息给Python或反之亦然...
如果你想要一个简单的出路,你需要修改你的python脚本(更多的是fabrik说的)来轮询一个数据库(或文件)的任何新的工作......并处理它,如果它发现一个...
我有使用标准的XML-RPC Python库提供简单的RPC接口的良好经验。 您只需在Python脚本中启动另一个线程,该脚本将处理来自PHP代码的XML-RPC请求。 PHP对http://phpxmlrpc.sourceforge.net/有相当成熟的XML-RPC支持。
虽然这将是一个工作方法,但它不能解决两个问题:1)如果更改时间,抓取工具需要每隔几秒检查一次。 2)PHP脚本必须每隔几秒读取一次并检查标志是否设置为true。 – Philipp 2011-03-31 12:24:31
@Philipp如果你喜欢cron,你可以每分钟/秒运行你的Python脚本。 – fabrik 2011-03-31 12:26:31
感谢您的意见。我已经结束了使用套接字。爬虫现在有一个专用线程监听特定端口。我现在可以使用php套接字使用web界面发送命令。虽然这不是我最喜欢的解决方案,但它完成了这项工作。 – Philipp 2011-04-02 22:09:29