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 の srting のみを認識します。{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

シェルがコマンドラインの引用符をいじっています。したがって、個々の引数を指定できる別の関数 ( などsubprocess.call) を使用します。

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

オペレーティング システムにはコマンド ラインの長さの制限があるため、JSON が非常に短い場合を除き、別の方法 (パイプ経由など) で PHP に渡した方がよい場合があります。

Python では、subprocess.Popenクラスを使用して JSON を PHP スクリプトにパイプすることができ、PHP スクリプトはfgets(STDIN).

于 2013-07-13T23:47:34.560 に答える