【百度云搜寻,搜各种材料:http://www.lqkweb.com】
【搜网盘,搜各种材料:http://www.swpan.cn】
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)
更多:http://scrapy-chs.readthedocs…