将抓取的项目作为json传递给PHP脚本

时间:2013-07-13 22:59:15

标签: php python json scrapy

所以我想将我的已删除项目传递给php脚本,我已经在我的管道中了:

class TalkPhpPipeline(object):

    def process_item(self, item, spider):
        toPHP = json.dumps(dict(item))

        os.system( '/usr/bin/php script.php %s' % toPHP)
        return item

和我的script.php

<? require_once('wp-config.php');
$string = $argv[1];
echo 'PHP see this ';
var_dump($string);

蜘蛛跟script.php说话很好,但是我的script.php只看到像{title:这样的长度7,如果我用item['title']替换为PHP,那么php端看到[usomewhere only we know],我真正想传递给php的是一个字符串,如: {'title': [u'somewhere only we know']}或仅{'title': ['somewhere only we know']},当然还有我的项目中包含的所有其他字段,我该怎么做?

谢谢,

1 个答案:

答案 0 :(得分:1)

shell正在弄乱命令行中的引号。因此,使用允许您指定单个参数的不同函数(例如subprocess.call):

subprocess.call(['/usr/bin/php', 'script.php', json.dumps(dict(item))])

请注意,除非JSON非常短,否则最好只是以不同的方式将其传递给PHP,例如通过管道,因为操作系统具有命令行长度限制。

在Python中,您可以使用subprocess.Popen类将JSON传递给PHP脚本,该脚本可以使用fgets(STDIN)检索JSON。