当我运行蜘蛛时,我必须向scrapy发送扩展设置。当我使用curl时,它真的很容易:
http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
但是当我想根据模块请求在python脚本中插入它时,我对setup = DOWNLOAD_DELAY = 2感到有点困惑,因为它不遵循通常的形式(key = value)。 所以我尝试了这个:
r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting=DOWNLOAD_DELAY': '2'})
但对通常的scrapy行为没有影响。
提前致谢。
答案 0 :(得分:3)
通常,在命令行上传递的键值对中,您将分割第一个 =
,而不是第二个。所以,这样做:
r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting': 'DOWNLOAD_DELAY=2'})
例如,在Program Argument Syntax Conventions的GNU文档中:
长选项包含' - '后跟由字母数字字符和短划线组成的名称。选项名称通常为一到三个字长,用连字符分隔单词。只要缩写是唯一的,用户就可以缩写选项名称。
要为long选项指定参数,请写入“--name = value”。此语法允许long选项接受本身可选的参数。
换句话说,在--foo=bar=baz
中,foo
是name
,bar=baz
是value
,因为=
不是字母数字字符或短划线。
同样,curl
处理选项-d foo=bar=baz
,其中foo
为name
,bar=baz
为值。
你无法直接从任何规范中推断出,你甚至无法直接推断出curl
完全遵循GNU参数语法,因为它不是GNU程序而且(IIRC)是自己的自定义参数解析。所以,你必须阅读the source才能完全确定。
或者,更简单地说,测试它。捕获curl
发出的表单编码请求。 (如果您不知道如何操作:尝试在{/ 1}}上运行假的服务器,例如,在Mac / BSD系统上运行netcat
,然后nc -kl 8888
,并查看显示的内容在命令行上。)
但只要你有curl http://localhost:8888/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
对,这种行为就是一种隐含的标准。