首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >完成刮伤爬虫时更新变量

完成刮伤爬虫时更新变量
EN

Stack Overflow用户
提问于 2017-03-29 14:18:54
回答 1查看 175关注 0票数 2

当我在一个循环中运行多个爬虫时,我想要跟踪有多少个爬虫。我尝试的是使用信号,但我的爬虫似乎找不到它的范围以外的其他模块。我想做的是注册爬行是在另一个脚本中完成的,例如通过传递/更新一个变量。

示例代码(简写版本-解释问题):

Controller.py

代码语言:javascript
复制
isWikipediaDone = False
for file in Spiders:
    process.crawl(file)

print(isWikipediaDone)

wikipediaSpider.py

代码语言:javascript
复制
class WikipediaSpider(scrapy.Spider):
 .... initialize ....

    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        spider = super(wikipediaSpider, cls).from_crawler(crawler, *args, **kwargs)
        crawler.signals.connect(spider.spider_closed, signal=signals.spider_closed)
        return spider

    def spider_closed(self, spider):
        print("Now we are done updating variable in Controller.py!")
        Controller.isWikipediaDone = True
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-29 16:37:13

您可以创建一个控制器类,然后将其导入到您的蜘蛛中:

代码语言:javascript
复制
# controller.py
class Controller:
    def mark_as_done(self, spider):
        print("{} is done!".format(spider.name))
controller = Controller()

并将控制器方法连接到蜘蛛内部的信号:

代码语言:javascript
复制
# myspider.py
from mypackage.controller import controller
...
crawler.signals.connect(controller.mark_as_done, signals.spider_closed) 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43096194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档