1. 程式人生 > >第三百五十四節,Python分布式爬蟲打造搜索引擎Scrapy精講—數據收集(Stats Collection)

第三百五十四節,Python分布式爬蟲打造搜索引擎Scrapy精講—數據收集(Stats Collection)

ack 高效 所有 crawl resp spider 方法 啟動 定義

第三百五十四節,Python分布式爬蟲打造搜索引擎Scrapy精講—數據收集(Stats Collection)

Scrapy提供了方便的收集數據的機制。數據以key/value方式存儲,值大多是計數值。 該機制叫做數據收集器(Stats Collector),可以通過 Crawler API 的屬性 stats 來使用
無論數據收集(stats collection)開啟或者關閉,數據收集器永遠都是可用的。 因此您可以import進自己的模塊並使用其API(增加值或者設置新的狀態鍵(stat keys))。 該做法是為了簡化數據收集的方法: 您不應該使用超過一行代碼來收集您的spider,Scrpay擴展或任何您使用數據收集器代碼裏頭的狀態。

數據收集器的另一個特性是(在啟用狀態下)很高效,(在關閉情況下)非常高效(幾乎察覺不到)。

數據收集器對每個spider保持一個狀態表。當spider啟動時,該表自動打開,當spider關閉時,自動關閉。

數據收集各種函數

stats.set_value(‘數據名稱‘, 數據值)設置數據
stats.inc_value(‘數據名稱‘)增加數據值,自增1
stats.max_value(‘數據名稱‘, value)當新的值比原來的值大時設置數據
stats.min_value(‘數據名稱‘, value)當新的值比原來的值小時設置數據
stats.get_value(‘數據名稱‘)獲取數據值
stats.get_stats()

獲取所有數據

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest


class PachSpider(scrapy.Spider):                            #定義爬蟲類,必須繼承scrapy.Spider
    name = pach                                           #設置爬蟲名稱
    allowed_domains = [www.dict.cn]                       #
爬取域名 def start_requests(self): #起始url函數,會替換start_urls return [Request( url=http://www.dict.cn/9999998888, callback=self.parse )] # 利用數據收集器,收集所有404的url以及,404頁面數量 handle_httpstatus_list = [404] # 設置不過濾404 def __init__(self): self.fail_urls = [] # 創建一個變量來儲存404URL def parse(self, response): # 回調函數 if response.status == 404: # 判斷返回狀態碼如果是404 self.fail_urls.append(response.url) # 將URL追加到列表 self.crawler.stats.inc_value(failed_url) # 設置一個數據收集,值為自增,每執行一次自增1 print(self.fail_urls) # 打印404URL列表 print(self.crawler.stats.get_value(failed_url)) # 打印數據收集值 else: title = response.css(title::text).extract() print(title)

第三百五十四節,Python分布式爬蟲打造搜索引擎Scrapy精講—數據收集(Stats Collection)