2017-12-27 59 views
1

현재 Scrapy Python 라이브러리를 사용하고 있습니다.치료 DOWNLOAD_DELAY이 순차적 리퀘스트를 위해 작동하지 않습니다.

먼저 Fitbit의 로그인 페이지 (https://www.fitbit.com/login)에 대한 FormRequest 호출을 작성하여 로그인하십시오. 그러면 Fitbit의 API (https://api.fitbit.com)에 100 건의 요청이 가깝습니다.

API를 강조하지 않으려면 (그리고 금지되지 않도록) settings.py 파일에서 DOWNLOAD_DELAY를 사용하여 요청 사이에 지연을 설정하고 싶습니다. 그러나 그것은 작동하지 않습니다.

튜토리얼 (http://scrapy.readthedocs.io/en/latest/intro/tutorial.html)에서 테스트 중이 었는데 제대로 작동하고있었습니다.

당신은 어떻게 생각하십니까? API (이러한 종류의 액세스를 처리해야 함)를 요청했기 때문입니까?

편집 :

class FitbitSpider: 
    start_urls = ["https://www.fitbit.com/login"] 

    def parse(self, response): 
     yield scrapy.FormRequest(url,formdata,callback=after_login) 

    def after_login(self, response): 
     for i in range(100): 
      yield scrapy.Request("https://api.fitbit.com/[...]") 

편집 2 :

BOT_NAME = 'fitbitscraper' 

SPIDER_MODULES = ['fitbitscraper.spiders'] 
NEWSPIDER_MODULE = 'fitbitscraper.spiders' 

DOWNLOAD_DELAY = 20 #20 seconds of delay should be pretty noticeable 
+0

튜토리얼은 무엇입니까? 어떤 코드를 테스트 했습니까? 의사 솔루션이 필요하지 않은 경우 의사 코드가 아닌 실제 코드를 표시하는 것이 좋습니다. – furas

+0

http://scrapy.readthedocs.io/ko/latest/intro/tutorial.html. 지연이 관찰되지 않는 한, 스크래핑이 제대로 작동합니다. 그리고 코드가 300 줄이기 때문에 여기에 줄 수는 없습니다 (주제와 관련이 없습니다.) – Xema

+0

'settings.py'를 보여주십시오. 또한 작동하지 않는다는 것을 어떻게 알았습니까? 완전한 정보를 제공하는 것이 가장 좋습니다. –

답변

0

좋아, 방금 내 문제에 대한 답변을 찾았습니다.

내가 실행하고있는 main.py 파일에서 CrawlerProcess를 작성한 것입니다.settings.py 파일에 설정을로드하지 않았습니다.

process = CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
}) 

process.crawl(fitbit_spider.FitbitSpider) 
process.start() 

을 나는에 CrawlerProcess을 변경 이제 경우 :

미리 나는 다음을 수행했다

process = CrawlerProcess({ 
     'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 
     'DOWNLOAD_DELAY': 20 
}) 

내가 원하는 지연을받을 수 있나요!

참고 : get_project_settings()을 사용하여 CrawlerProcess를 만들지도 않습니다.

5

따르면 the documentation에 :

여기 내 settings.py 파일이 여기 내 거미의 의사 코드는 DOWNLOAD_DELAY : 다운로더가 이전에 기다려야하는 시간 (초) 동일한 웹 사이트에서 연속 된 페이지를 다운로드합니다. 이것은 크롤링 속도를 조절하여 서버를 너무 세게 치는 것을 피할 수 있습니다. 우리가 볼 수 있듯이

,이 구성은 동일한 웹 사이트에서 연속 페이지에 영향을 미치는, 그 때문에 크롤러의 할당 slots이다. 기본적으로 scrapy은 도메인 당 슬롯을 설정합니다. 왜냐하면 모든 슬롯이 자체 속도를 처리해야하기 때문입니다.

이제, 당신은 또한 변경할 수있는 slot에 요청이 meta 변수 download_slot 취급, 그래서 당신이 무엇을 할 수 있는지 모른다면 당신이 변수로 재생되지 있는지 확인 할 수있다. 그들이 사용할 수없는

그래서 있는지 확인하거나, 모두를 사용하려고 시도되지 않습니다

또한 다른 설정과 같은 DOWNLOAD_DELAY을 방해 할 수 있습니다 동일한 프로젝트의 설정.

또한 download_delaySpider 변수로 활성화 할 수 있으며 설정 내의 변수보다 우선한다는 점을 알아야합니다.