天天看點

Scrapy : Stats Collection, Sending e-mailStats CollectionSending e-mail

Stats Collection

scrapy提供了一个方便的设施来收集键值表单中的统计信息,这里的值通常使计数器。这个设施被称为Stats Collector, 并且可以通过 Crawler API的stats属性访问,下方的Common Stats Collector uses给了说明的例子。

然而,Stats Collector总是可用的,所以你可以导入他并使用它的API(增加或设置新的统计键),不管统计资料收集是否可用。如果不可用,API仍会工作但不会收集任何东西。为了简化Stats Collector的用法,你应该使用不超过一行的代码来收集爬虫的统计资料,scrapy扩展或任何你使用Stats Collector来收集的代码

Stats Collector的其他特性也非常高效(当可用时)并且禁用也是很高效的。。(尽管很不起眼)

Stats Collector在爬虫打开时自动为每个爬虫开启一个统计表,并且在爬虫关闭时也关闭。

Common Stats Collector uses

通过stats属性访问Stats Collector,这是访问stats的扩展例子。

class ExtensionThatAccessStats:

    def __init__(self, stats):
        self.stats = stats

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.stats)
           

Set stat value:

stats.set_value('hostname', socket.gethostname())
           

Increment stat value:

stats.inc_value('custom_count')
           

Set stat value only if greater than previous:

stats.max_value('max_items_scraped', value)
           

Set stat value only if lower than previous:

stats.min_value('min_free_memory_percent', value)
           

Get stat value:

>>> stats.get_value('custom_count')
1
           

Get all stats:

>>> stats.get_stats()
{'custom_count': 1, 'start_time': datetime.datetime(2009, 7, 14, 21, 47, 28, 977139)}
           

Available Stats Collectors

处理基本的

StatsCollector

,这些是以基本Stats Collector扩展出来的Stats Collector。你可以通过STATS_CLASS来选择这些。默认的Stats Collector使用

MemoryStatsCollector

MemoryStatsCollector

  • class

    scrapy.statscollectors.``MemoryStatsCollector

    [source]

一个简单的Stats Collector来保留内存中抓取的的最后的统计信息(对每一个爬虫),在他们被关闭后。统计信息可用通过spider_stats属性访问,得到一个字典关键字是爬虫的域名。默认的Stats Collector

spider_stats

一个字典(以爬虫名为键)包含了每个爬虫最后抓取的统计信息。

DummyStatsCollector

  • class

    scrapy.statscollectors.``DummyStatsCollector

    [source]

tats Collector除了非常高效就啥也不干了(因为什么都不做)。这个Stats Collector可用通过STAT_CLASS设置,禁用Stats Collector是为了提高性能,但是跟其他scrapy的工作负载例如解析网站相比,统计信息收集通常是微不足道的。

Sending e-mail

尽管python可以通过

smtplib

库方便的发送邮件,但scrapy也提供了自身的设施来发送邮件,使用方便并且它使用 Twisted non-blocking IO实现,可以避免干扰抓取器的非阻塞IO,也提供一个简单的API来发送附件并且可以通过很少的 settings来简单配置。

Quick example

两种方式实例化邮件发送器,你可以使用标准的__init_ 方法来实例它。

from scrapy.mail import MailSender
mailer = MailSender()
           

或者通过传递一个scrapy 设置对象来实例化,适用于settings。

mailer = MailSender.from_settings(settings)
           

这是怎样用来发送邮件(没有附件的)

mailer.send(to=["[email protected]"], subject="Some subject", body="Some body", cc=["[email protected]"])
           

MailSender class reference

在scrapy中使用MailSender 来发送邮件更好,它使用Twisted non-blocking IO, 就像框架的其余部分一样。

class scrapy.mail.MailSender(smtphost=None,mailfrom=None,smtpuser=None,smtpport=None,smtppass=None)

Parameters:

  • smtphost (str or bytes) – 用来发送邮件的SMTP主机,如果忽略,使用

    MAIL_HOST

    设置。
  • mailfrom (str) – 发送邮件的地址(以From:header的格式),如果忽略the

    MAIL_FROM

    setting will be used.
  • smtpuser – SMTP使用者,如果忽略使用

    MAIL_USER

    设置。如果没给,就没有SMTP认证方式来执行。
  • smtppass (str or bytes) – 传递给认证的SMTP
  • smtpport (int) – the SMTP port to connect to# 用来连接SMTP的接口
  • smtptls (boolean) – 强制使用SMTP STARTTLS。
  • smtpssl (boolean) – 强制使用安全的SSL连接

classmethod:

from_settings(settings)

使用scrapy设置对象来实例化, 使用 these Scrapy settings.

parameters: settings(

scrapy.settings.Settings

object),邮件的收件人

send(to,subject,body,cc=None,attachs=(),mimetype=‘text/plain’,charset=None)

给收件人发送邮件

参数:

  • to (str or list of str) – 收件人
  • subject (str) – 邮件的主题
  • cc (str or list of str) – 给CC 的邮件???
  • body (str) – 邮件正文
  • attachs (iterable) –一个可迭代的元组(attach_name,mimetype,file_object), attch_name是字符串,出现在邮件附加上的名字。mimetype是附件的媒体类型,file_object是可读额文件对象包含了附件。
  • mimetype (str) – 邮件的媒体类型
  • charset (str) – 邮件内容使用的字符编码

Mail settings

这些方法定义在MailSender默认的__init__ 方法值中,可以用来在你的项目中配置邮件通知,而不用写任何代码(这些扩展和代码都可以使用MailSender)

MAIL_FROM

Default:

'[email protected]'

发送者邮箱来发送邮件的,使用(发件人:标头)

MAIL_HOST

Default:

'localhost'

用来发送邮件的SMTP主机

MAIL_PORT

Default:

25

用于发送邮件的接口。

MAIL_USER

Default:

None

用来SMTP认证的用户,如果禁用,就不执行认证。

MAIL_PASS

Default:

None

用来认证的密码,于MATL_USER一起的。

MAIL_TLS

Default:

False

强迫使用STARTTLS ,STARTTLS是一种将现有的不去安全的来南京更新成使用SSL/TLS安全连接的一种方式。

MAIL_SSL

Default:

False

强制连接,使用SSL加密连接。