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@classmethoddef 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=["someone@example.com"], subject="Some subject", body="Some body", cc=["another@example.com"])
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: 'scrapy@localhost'
发送者邮箱来发送邮件的,使用(发件人:标头)
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加密连接。