[PYTHON] Scrapy : spider_idle 이벤트 콜백에서 요청을 수동으로 삽입하는 방법은 무엇입니까?
PYTHONScrapy : spider_idle 이벤트 콜백에서 요청을 수동으로 삽입하는 방법은 무엇입니까?
나는 거미를 만들었고 spider_idle 이벤트에 메서드를 연결했습니다.
수동으로 요청을 추가하려면 어떻게합니까? 모든 알려진 URL이 파싱되었으므로 구문 분석에서 항목을 반환 할 수 없습니다.이 경우에는 실행되지 않습니다. 새 요청을 생성하는 메서드가 있고 만든 된 요청을 추가하려면 spider_idle 콜백에서 실행하고 싶습니다.
class FooSpider(BaseSpider):
name = 'foo'
def __init__(self):
dispatcher.connect(self.dont_close_me, signals.spider_idle)
def dont_close_me(self, spider):
if spider != self:
return
# The engine instance will allow me to schedule requests, but
# how do I get the engine object?
engine = unknown_get_engine()
engine.schedule(self.create_request())
# afterward, ensure we stay alive by raising DontCloseSpider
raise DontCloseSpider("..I prefer live spiders.")
업데이트 : 나는 아마도 ExecutionEngine 객체가 필요하다고 결정했지만, 크롤러 인스턴스에서 사용할 수는 있지만 스파이더를 가져 오는 방법을 정확히 알지 못합니다.
업데이트 2 : .. 감사합니다. .. 크롤러는 수퍼 클래스의 속성으로 연결되므로 추가 작업없이 self.crawler를 사용할 수 있습니다. >.>
해결법
-
==============================
1.
class FooSpider(BaseSpider): def __init__(self, *args, **kwargs): super(FooSpider, self).__init__(*args, **kwargs) dispatcher.connect(self.dont_close_me, signals.spider_idle) def dont_close_me(self, spider): if spider != self: return self.crawler.engine.crawl(self.create_request(), spider) raise DontCloseSpider("..I prefer live spiders.")
업데이트 2016 :
class FooSpider(BaseSpider): yet = False @classmethod def from_crawler(cls, crawler, *args, **kwargs): from_crawler = super(FooSpider, cls).from_crawler spider = from_crawler(crawler, *args, **kwargs) crawler.signals.connect(spider.idle, signal=scrapy.signals.spider_idle) return spider def idle(self): if not self.yet: self.crawler.engine.crawl(self.create_request(), self) self.yet = True
from https://stackoverflow.com/questions/16970112/scrapy-how-to-manually-insert-a-request-from-a-spider-idle-event-callback by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] python3에서 프로그램의 표준 입력으로 보내기 3 (0) | 2018.10.24 |
---|---|
[PYTHON] Scikit을 사용하여 특정 클래스 예측에 대한 각 기능의 기여도 결정 (0) | 2018.10.24 |
[PYTHON] 파이썬 : mechanize.Browser 인스턴스의 쿠키를 버리는 법? (0) | 2018.10.24 |
[PYTHON] 아파치 2에서 파이썬 스크립트 실행하기 (0) | 2018.10.24 |
[PYTHON] 파이썬에서 ICP (Iterative Closest Point) 구현 (0) | 2018.10.24 |