2013-02-21 3 views
2

거미를 실행할 때 확장 설정을 scrapy로 보내야합니다.요청 모듈을 기반으로하는 파이썬 요청에 컬링에 의해 수행 된 게시물 요청을 변환하십시오.

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

을하지만 모듈의 요구에 따라 파이썬 스크립트에서이 연결 싶었다 때하지 않기 때문에, 나는 조금, = DOWNLOAD_DELAY = 2를 설정하는 방법에 대한 혼란스러워했다 : 나는 곱슬 곱슬 사용할 때 정말 아주 쉽게 일반적인 형식 (key = value)을 따르십시오. 그래서 나는이 시도 :

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

을하지만 보통 scrapy의 행동에 영향을주지 않습니다. 사전에

감사합니다.

답변

3

일반적으로는, 명령 줄에서 전달 키 - 값 쌍으로, 당신은 = 아닌 초에 분할합니다. 그래서, 이렇게 예를 들면 다음과 같습니다

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

을의 GNU 문서에 Program Argument Syntax Conventions을 위해 :

긴 옵션은 다음과 같이 구성 '-'영숫자와 대시로 만든 다음에 이름. 옵션 이름은 일반적으로 단어를 구분하는 하이픈과 함께 1-3 단어 길이입니다. 사용자는 약어가 고유 한 경우 옵션 이름을 약어로 지정할 수 있습니다.

긴 옵션의 인수를 지정하려면 '--name = value'를 작성하십시오. 이 구문을 사용하면 긴 옵션을 사용하여 자체 옵션 인 인수를 수락 할 수 있습니다. --foo=bar=baz에서 즉

fooname이며, =은 영숫자 문자 또는 대시하지 않기 때문에 bar=bazvalue입니다.

마찬가지로, curl는 값으로 name과 같은 bar=bazfoo-d foo=bar=baz 옵션을 처리한다.

당신은 어떤 spec-in 사실에서 직접적으로 GNU 프로그램이 아니며 (IIRC) 자체 커스텀 인수를 가지므로 curl이 GNU 인수 구문을 전혀 따르지 않는다고 직접적으로 추론 할 수는 없습니다 파싱. 따라서 절대적으로 확실하려면 the source을 읽어야합니다.

또는 더 간단하게 테스트하십시오. curl이 보내는 양식 인코딩 요청을 캡처하십시오. (당신이 방법을 모르는 경우 :., 맥/BSD 시스템에서, 예를 들어, 단지 netcat와 가짜 서버를 실행 한 후 curl http://localhost:8888/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1nc -kl 8888을 시도하고 명령 줄에 표시됩니다 무엇 참조)

그러나 이런 종류의 행동은 당신이 name=value 쌍일 때마다 암묵적인 표준입니다.