我正在使用 Tor(通过 Privoxy)进行抓取项目,并想编写一个 Scrapy 扩展(参见 https://doc.scrapy.org/en/latest/topics/extensions.html),只要达到一定数量的项目,它就会请求一个新身份(参见 https://stem.torproject.org/faq.html#how-do-i-request-a-new-identity-from-tor)被抓取掉了。
但是,身份的更改需要一些时间(几秒钟),在此期间我希望不会有任何内容被抓取。因此,我想让扩展“暂停”蜘蛛,直到 IP 更改完成。
这可能吗? (我已经阅读了一些关于使用 Cntrl+C 并指定 JOBDIR
的解决方案,但这似乎有点过激,因为我只想暂停蜘蛛,而不是停止整个引擎)。
最佳答案
爬虫引擎有 pause
和 unpause
方法,所以你可以尝试这样的事情:
class SomeExtension(object):
@classmethod
def from_crawler(cls, crawler)
o = cls(...)
o.crawler = crawler
return o
def change_tor(self):
self.crawler.engine.pause()
# some python code implements changing logic
self.crawler.engine.unpause()
关于python - 如何在 Scrapy 中 'pause' 蜘蛛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43920440/