2013-02-21 140 views
2

當我運行蜘蛛時,我必須向scrapy發送擴展設置。這真的很容易,當我使用捲曲:將curl執行的請求轉換爲基於請求的python請求模塊

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

但是,當我想基於模塊的請求在Python腳本堵塞這個,我有點困惑設置= DOWNLOAD_DELAY = 2,因爲它不遵循通常的形式(key = value)。 所以,我想這一點:

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

,但對平常scrapy的行爲沒有影響。

在此先感謝。

回答

3

通常情況下,在通過命令行傳遞的鍵值對中,您將分割第一個第一個=,而不是第二個。對於Program Argument Syntax Conventions

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

例如,GNU文檔中:那麼,這樣做

長選項包括「 - 」,然後由字母數字字符和連字符的名稱。選項名稱通常是一到三個字長,用連字符分隔單詞。只要縮寫是唯一的,用戶可以縮寫選項名稱。

要指定長選項的參數,請寫'--name = value'。此語法使長選項能夠接受本身是可選的參數。

換句話說,在--foo=bar=bazfooname,和bar=bazvalue,因爲=不是一個字母數字字符或破折號。

類似地,curl處理選項-d foo=bar=bazfoo作爲namebar=baz作爲值。

不能直接推斷,從任何規範,事實上,你甚至不能直接推斷curl遵循GNU參數語法可言,因爲它不是一個GNU程序和(IIRC)做它自己的自定義參數解析。所以,你必須仔細閱讀the source

或者更簡單地說,測試它。捕獲curl發出的表單編碼請求。 (如果你不知道該怎麼做:儘量只運行一個假的服務器netcat,例如,nc -kl 8888在Mac/BSD系統上,然後curl http://localhost:8888/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1,並看到在命令行上顯示的內容)

但這種行爲幾乎是一個隱含的標準,只要你有name=value對。