python scrapy爬虫信号量详解
2022年5月30日大约 3 分钟约 781 字
Scrapy
使用信号来通知事情发生。在项目中捕捉一些信号通过extension
来完成额外的功能。
信号提供了一些参数,处理函数可以不用接收所有的参数,信号分发器仅仅提供处理器接受的参数。
有些信号支持从处理器返回延迟对象(Twisted deferreds
)
from scrapy.xlib.pydispatch import dispatcher # 调度器
from scrapy import signals # 信号
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://blog.jobbole.com/all-posts/']
def __init__(self):
dispatcher.connect(self.handle_spider_closed, signals.spider_closed)
# 爬虫关闭的信号量处理器
def handle_spider_closed(self):
stats = self.crawler.stats.get_stats() # 获取数据搜集器所有数据
print(stats) # 打印出来
def parse(self, response):
pass
内置信号参考手册
信号函数 | 解释 |
---|---|
engine_started() | 引擎启动时 支持返回 deferreds 也可能在 spider_opened 后被发送,取决于spider启动方式 |
engine_stopped() | 引擎停止时(例如爬取结束) 支持返回 deferreds |
item_scraped(item,response,spider) | 当item通过所有Pipeline后(没有被丢弃(dropped))时 支持返回 deferreds 参数:item对象:提取到的item;spider对象:提取item的spider;response对象:提取item的response; |
item_dropped(item,exception,spider) | 当item通过Pipeline,有些Pipeline抛出DropItem 异常,丢弃Item时支持返回 deferreds 参数:丢弃的item对象;提取item的spider对象;导致Item被丢弃的异常(必须是 DropItem 的子类) |
spider_closed(spider,reason) | 当某个Spider被关闭时 支持返回 deferreds 可以用来释放每一个Spider在 spider_opened 时占用的资源参数:关闭的Spider;被关闭的原因的字符串( 'finished'——完成,'cancelled'——被close_spider方法关闭,'shutdown'——引擎被关闭(Ctrl-C等) ) |
spider_opened(spider) | 当爬虫开始爬取时 支持返回 deferreds 参数:开启的Spider对象 |
spider_idle(spider) | 当Spider空闲(idle)时 不支持返回 deferreds 空闲意味着: requests正在等待被下载;requests被调度;items正在pipeline中被处理。 当该信号所有处理器被调用后,如果spider任空闲,引擎将会关闭该spider。当spider被关闭后, spider_closed 信号将被发送你可以在这里调度某些请求来避免spider被关闭。 参数:空闲的Spider对象。 |
spider_error(failure,response,spider) | 当Spider的回调函数产生错误时(例如抛出异常) 参数:Twisted Failure对象,当异常被抛出时被处理的Response对象;抛出异常的Spider对象。 |
request_scheduled(request,spider) | 当引擎调度一个Request 对象用于下载时不支持返回 deferreds 参数:到达调度器的Request;产生该Request的Spider对象 |
response_received(response,request,spider) | 当引擎从downloader获取到一个新Response时 不支持返回 deferreds 参数:接收到的Response对象;生成Response的Request对象;Response所对应的Spider对象。 |
response_downloader(response,request,spider) | 当一个HTTPResponse 被下载时,由downloader发送该信号不支持返回 deffereds 参数:下载的Response对象;生成Response的Request对象;Response所对应的Spider对象; |