2017-10-01 6 views
0

관련이 있는지 없는지는 잘 모르겠지만 인라인 요청 라이브러리를 사용합니다.잘못된 요청 후 치료가 중지됨

사이트 API에 요청을 보내고 잘못된 요청 (400)을 반환하면 크롤러가 중지됩니다. 어떻게하면 계속 할 수 있을까요?

아래 예에서 ISBN은 '0046594062994'이며 책을 판매하지 않았기 때문에이 책이 없으므로 잘못된 요청을 반환합니다 (아래 URL을 입력 해보십시오) . 그들이 가지고있는 책들로 잘 작동합니다.

~~~~~~~~~

@EDIT : 내가 발견은 인라인 요청 알려진 문제입니다.

"미들웨어는 200이 아닌 상태 응답을 삭제하거나 무시할 수 있기 때문에 콜백이 실행을 계속할 수 없습니다.이 문제는 handle_httpstatus_all 플래그를 사용하여 극복 할 수 있습니다 (httperror 미들웨어 설명서 참조).

문서 : https://doc.scrapy.org/en/latest/topics/spider-middleware.html#scrapy.spidermiddlewares.httperror.HttpErrorMiddleware

는 내가 의사가 말하는하려고 노력하지만, 그것을 어떻게 관리하지 않았다. 무엇이 잘못 되었나요? 예제 코드에 추가 된 행을 확인하십시오.

예제 코드 :

response2 = yield scrapy.Request("https://api.bookscouter.com/v3/prices/sell/0046594062994.json") 
    response2.meta['handle_httpstatus_all'] = True 
    jsonresponse = loads(response2.body) 
+0

을 확인해야합니다. 따라서 최신 버전의 Scrapy와 함께 사용하지 않는 것이 좋습니다. –

+0

@ Tarun Lalwani 수정을 확인하십시오. – daniel

+1

'yield scrapy.Request ("https://api.bookscouter.com/v3/prices/sell/0046594062994.json", meta = { 'handle_httpstatus_all': True})를 사용하십시오. –

답변

1

당신은 301 같은 모든 코드, 302 리디렉션도 손으로 될 것입니다 당신이 handle_httpstatus_all를 설정하는 이제

response2 = yield scrapy.Request("https://api.bookscouter.com/v3/prices/sell/0‌​046594062994.json", meta = {'handle_httpstatus_all' : True}) 


jsonresponse = loads(response2.body) 

이하로 사용하여 요청 자체에 대한 메타를 통과해야 너에게.

그래서 당신은 인라인 요청 라이브러리가 오래되어 지금은 년 이상 업데이트되지 않았습니다

if response.status == 200: 
    jsonresponse = loads(response2.body) 
else: 
    print("do something else")