从PHP脚本向Python网络爬虫传递数据
我有一个用Python写的爬虫,每隔几分钟就会爬取一些网页。现在我想做一个用户界面,让大家可以通过网络访问,并显示爬虫获取的数据。我打算用PHP和HTML来做这个界面。无论如何,这个用户界面需要一个按钮,点击后可以立即让爬虫去爬取一个特定的网站,而不是等到下一个爬取的时间。
现在,有没有办法把数据从PHP脚本传给正在运行的Python脚本呢?我想过用标准输入/输出,但找不到怎么实现(一个进程写入另一个进程的标准输入)。然后我又想到了用一个共享文件,PHP写入这个文件,Python读取。但是这样的话,我需要一种方法让Python脚本知道文件里有新数据被写入,同时也需要一种方法让PHP脚本知道爬虫什么时候完成了任务。还有一种方法是用套接字,但我觉得这样有点复杂,不够简单。
你有什么建议可以让一切尽量简单,同时又能让我把数据从PHP脚本发送到正在运行的Python进程吗?
谢谢你提前提供的任何想法!
补充说明:我应该提到,爬虫会把获取的数据保存到一个SQL数据库中,PHP可以访问这个数据库。所以从Python爬虫到PHP脚本传数据没有问题,问题在于反向传输。
3 个回答
因为我对Python的工作原理了解不多,所以请把这个当作一个大胆的想法。
- 在你的服务器上创建一个XML文件,这个文件可以被Python和PHP都访问。
- 在PHP那边,你可以往这个XML里添加新的节点,记录新的网址,并设置一个
processed=false
的标记。 - 然后Python会来查看那些未处理的任务,获取数据并把信息存入你的数据库。
- 成功获取数据后,修改
processed
标记为已处理。 - 下次PHP访问这个XML时,删除那些标记为
processed=true
的节点。
希望这对你有帮助。
我有使用标准的XML-RPC Python库来提供简单的远程过程调用(RPC)接口的好经验。你只需要在Python脚本中启动另一个线程,这个线程会处理来自PHP代码的XML-RPC请求。PHP对XML-RPC的支持已经相当成熟,可以参考这个链接:http://phpxmlrpc.sourceforge.net/。
要解决不同编程语言之间的依赖问题,最好的办法是使用消息队列库,比如rabbitMQ或ActiveMQ。
通过使用这些工具,你可以直接从PHP发送消息到Python,或者反过来。
如果你想要一个简单的解决方案,你需要修改你的Python脚本(更像是fabrik说的那样),让它定期检查一个数据库(或者一个文件)有没有新的任务,如果找到了就处理它。