3

スパイダーを実行するときに、拡張設定をscrapyに送信する必要があります。curlを使用すると、非常に簡単です。

 http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1

しかし、これをモジュール要求に基づいてPythonスクリプトにプラグインしたい場合、通常の形式(key = value)に従わないため、setting = DOWNLOAD_DELAY=2について少し混乱しました。だから私はこれを試しました:

r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting=DOWNLOAD_DELAY': '2'})

ただし、通常のスクラピーズの動作には影響しません。

前もって感謝します。

4

1 に答える 1

4

通常、コマンドラインで渡されるキーと値のペアでは、2番目ではなく最初 =のペアで分割します。だから、これを行います:

r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting': 'DOWNLOAD_DELAY=2'})

たとえば、プログラム引数の構文規則に関するGNUドキュメントでは次のようになります。

長いオプションは、「-」の後に英数字とダッシュで構成される名前が続きます。オプション名は通常、1〜3語の長さで、単語を区切るハイフンが付いています。省略形が一意である限り、ユーザーはオプション名を省略できます。

longオプションの引数を指定するには、「-name=value」と記述します。この構文により、長いオプションは、それ自体がオプションである引数を受け入れることができます。

つまり、--foo=bar=bazfoo英数字またはダッシュではないため、namebar=baz、、はです。value=

同様に、およびを値として使用しcurlてオプション-d foo=bar=bazを処理します。foonamebar=baz

それをどの仕様からも直接推測することはできません。実際、curlGNUプログラムではなく、(IIRC)が独自のカスタム引数解析を行うため、GNU引数構文に従うことを直接推測することさえできません。したがって、絶対に確実にするためにソースを読む必要があります。

または、もっと簡単に、それをテストします。送信するフォームエンコードされたリクエストをキャプチャしcurlます。(その方法がわからない場合はnetcat、たとえばnc -kl 8888Mac / BSDシステムで偽のサーバーを実行してみcurl http://localhost:8888/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1て、コマンドラインに何が表示されるかを確認してください。)

name=valueしかし、この種の動作は、ペアがある場合は常に暗黙の標準です。

于 2013-02-21T18:54:00.670 に答える