python - 如何在 Scrapy 中 'pause' 蜘蛛?

标签 python scrapy

我正在使用 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 的解决方案,但这似乎有点过激,因为我只想暂停蜘蛛,而不是停止整个引擎)。

最佳答案

爬虫引擎有 pauseunpause 方法,所以你可以尝试这样的事情:

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/

相关文章:

php - 从 PHP 学习 Python

Python 字符串修剪

python - 无法使用 '"c :\bld\scrapy_1564674375870\_h_env\python. exe 创建进程”

python - 运行 scrapy 网络爬虫时出错

python - 如何在 Scrapy 框架中使用 RobotsTxtMiddleware?

python - 多对多字段和 request.user 不起作用

python - Pandas 行总和

python - 将 Eye Gaze(俯仰和偏航)转换为屏幕坐标(人在看哪里?)

python - 数据收集 Urllib2+bs4 与 Scrapy

python-3.x - Scrapy爬取蜘蛛不下载文件?