日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

三十四 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

發布時間:2023/11/30 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三十四 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

信號一般使用信號分發器dispatcher.connect(),來設置信號,和信號觸發函數,當捕獲到信號時執行一個函數

dispatcher.connect()信號分發器,第一個參數信號觸發函數,第二個參數是觸發信號,

?

以下是各種信號

signals.engine_started當Scrapy引擎啟動爬取時發送該信號。該信號支持返回deferreds。
signals.engine_stopped當Scrapy引擎停止時發送該信號(例如,爬取結束)。該信號支持返回deferreds。

?

signals.item_scraped(item, response, spider)當item被爬取,并通過所有 Item Pipeline 后(沒有被丟棄(dropped),發送該信號。該信號支持返回deferreds。
  參數:
  item (Item 對象) – 爬取到的item
  spider (Spider 對象) – 爬取item的spider
  response (Response 對象) – 提取item的response


signals.item_dropped(item, exception, spider)當item通過 Item Pipeline ,有些pipeline拋出 DropItem 異常,丟棄item時,該信號被發送。該信號支持返回deferreds。
  參數:
  item (Item 對象) – Item Pipeline 丟棄的item
  spider (Spider 對象) – 爬取item的spider
  exception (DropItem 異常) – 導致item被丟棄的異常(必須是 DropItem 的子類)


signals.spider_closed(spider, reason)當某個spider被關閉時,該信號被發送。該信號可以用來釋放每個spider在 spider_opened 時占用的資源。該信號支持返回deferreds。
  參數:
  spider (Spider 對象) – 關閉的spider
  reason (str) – 描述spider被關閉的原因的字符串。如果spider是由于完成爬取而被關閉,則其為 'finished' 。否則,如果spider是被引擎的 close_spider 方法所關閉,則其為調用該方法時傳入的   reason 參數(默認為 'cancelled')。如果引擎被關閉(例如, 輸入Ctrl-C),則其為 'shutdown' 。


signals.spider_opened(spider)當spider開始爬取時發送該信號。該信號一般用來分配spider的資源,不過其也能做任何事。該信號支持返回deferreds。
  參數: spider (Spider 對象) – 開啟的spider


signals.spider_idle(spider)當spider進入空閑(idle)狀態時該信號被發送??臻e意味著:
  requests正在等待被下載
  requests被調度
  items正在item pipeline中被處理
當該信號的所有處理器(handler)被調用后,如果spider仍然保持空閑狀態, 引擎將會關閉該spider。當spider被關閉后, spider_closed 信號將被發送。您可以,比如,在 spider_idle 處理器中調度某些請求來避免spider被關閉。該信號 不支持 返回deferreds。
  參數: spider (Spider 對象) – 空閑的spider


signals.spider_error(failure, response, spider)當spider的回調函數產生錯誤時(例如,拋出異常),該信號被發送
  參數:
  failure (Failure 對象) – 以Twisted Failure 對象拋出的異常
  response (Response 對象) – 當異常被拋出時被處理的response
  spider (Spider 對象) – 拋出異常的spider


signals.request_scheduled(request, spider)當引擎調度一個 Request 對象用于下載時,該信號被發送。該信號 不支持 返回deferreds。
  參數:
  request (Request 對象) – 到達調度器的request
  spider (Spider 對象) – 產生該request的spider


signals.response_received(response, request, spider)當引擎從downloader獲取到一個新的 Response 時發送該信號。該信號 不支持 返回deferreds。
  參數:
  response (Response 對象) – 接收到的response
  request (Request 對象) – 生成response的request
  spider (Spider 對象) – response所對應的spider


signals.response_downloaded(response, request, spider)當一個 HTTPResponse 被下載時,由downloader發送該信號。該信號 不支持 返回deferreds。
  參數:
  response (Response 對象) – 下載的response
  request (Request 對象) – 生成response的request
  spider (Spider 對象) – response所對應的spider

?

我們以signals.spider_closed(spider, reason)信號舉例其他信號同理:

# -*- coding: utf-8 -*- import scrapy from scrapy.http import Request,FormRequest from scrapy.xlib.pydispatch import dispatcher # 信號分發器 from scrapy import signals # 信號class PachSpider(scrapy.Spider): #定義爬蟲類,必須繼承scrapy.Spidername = 'pach' #設置爬蟲名稱allowed_domains = ['www.dict.cn'] #爬取域名def start_requests(self): #起始url函數,會替換start_urlsreturn [Request(url='http://www.dict.cn/9999998888',callback=self.parse)]# 利用數據收集器,收集所有404的url以及,404頁面數量handle_httpstatus_list = [404] # 設置不過濾404def __init__(self):self.fail_urls = [] # 創建一個變量來儲存404URLdispatcher.connect(self.spider_closed, signals.spider_closed) # dispatcher.connect()信號分發器,第一個參數信號觸發函數,第二個參數是觸發信號,signals.spider_closed是爬蟲結束信號def spider_closed(self, spider, reason): # 信號觸發函數print('爬蟲結束 停止爬蟲')print(self.fail_urls) # 打印404URL列表print(self.crawler.stats.get_value('failed_url')) # 打印數據收集值def parse(self, response): # 回調函數if response.status == 404: # 判斷返回狀態碼如果是404self.fail_urls.append(response.url) # 將URL追加到列表self.crawler.stats.inc_value('failed_url') # 設置一個數據收集,值為自增,每執行一次自增1else:title = response.css('title::text').extract()print(title)

?

轉載于:https://www.cnblogs.com/meng-wei-zhi/p/8182807.html

總結

以上是生活随笔為你收集整理的三十四 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。