我正在使用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并指定a的解决方案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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |