0

所以我想将我抓取的项目传递给一个 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 只看到像这样的长度为 7 的字符串{title:,如果我改为将 toPHP 替换为item['title'],那么 php 端会看到[usomewhere only we know],我真正想要传递给 php 的字符串是: {'title': [u'somewhere only we know']}或者只是{'title': ['somewhere only we know']},当然还有我的项目包含的所有其他字段,我该怎么做?

谢谢,

4

1 回答 1

1

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

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

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

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

于 2013-07-13T23:47:34.560 回答