| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [View Raw Code] [Original HTTPS Page] |
SMTP (Simple Mail Transfer Protocol : 简单邮件传输协议) : 一组用于由原地址到目的地址传送邮件的规则,由它来控制新建的中转方式
python 的 smtplib 提供了一种很方便的途径发送电子邮件,对 smtp 进行了简单的封装
import smtplib
smtpObj = smtplib.SMTP([host [, port [, local_hostname]]])Python SMTP 使用 sendmail 方法发送邮件,语法格式:
SMTP.sendmail(from_addr, to_addrs, msg [, mail_options, rcpt_options])五个步骤
# 导入邮件包
import smtplib
# 创建邮件对象
smtpobj = smtplib.SMTP()
# 连接服务器
smtpobj.connect()
# 登录操作
smtpobj.login()
# 发送邮件
smtpobj.sendmail()
# 退出操作
smtpobj.quit()安装步骤
redis 重要文件
一个 reids 配置文件就是一个 redis 数据库
开启多个 redis 服务
复制配置文件,名称后添加需要开启的端口号
打开配置文文件更改端口号
# Accept connections on the specified port, default is 6379 (IANA #815344). # If port 0 is specified Redis will not listen on a TCP socket. port 6379
开启多个命令端口,使用 redis-server [配置文件] 启动 redis 服务
链接 redis 数据库 redis-cli -p 端口号
redis 优点
使用分布式的原因
Scrapy 和 Scrapy-Redis 的区别
Scrapy-redis 架构
Scheduler 调度器 : 负责对新的 request 进行入队操作 (加入 Scrapy queue), 取出下一个要爬取的 request (从 Scrapy queue 中取出)等操作
Scrapy 改造了 python 本来的 **collection.deque (双向队列) ** 形成自己的 Scrapy queue
Scrapy 多个 spider 不能共享待爬取队列 Scrapy queue, 即 Scrapy 本身不支持爬虫分布式,Scrapy-redis 解决就是把 Scrapy queue 换为 redis 数据库 (也是指 redis 队列),在同一个 redis-server 存放要爬取的 request,便可以让多个 spider 在一个 redis 数据库读取
Scrapy-redis 把待爬取的队列按照优先级建立了一个字典结构,然后根据优先级,决定队列顺序,出列时优先级较小的优先出列.
{
优先级0 : 队列0,
优先级1 : 队列1,
优先级2 : 队列2,
...
}
Duplication Filter (DupeFilter) : 负责 Scrapy-redis 的去重功能,通过redis 的 set 不重复 的特性,实现去重.
Scrapy 去重 : 用集合实现 request 去重,Scrapy 将已将发送的 request 指纹放入一个集合中,把下一个 request 指纹拿到集合中对比,如果指纹存在于集合,说明 request 发送过了,没有则继续操作
def request_seen(self, request):
# self.request_fingerprints(request) 一个指纹集合
fp = self.request_fingerprints(request)
# 核心操作
if fp in self.fingerprints:
return True
self.fingerprints.add(fp)
if self.file:
self.file.write(fp + os.linesep)Scrapy-redis 去重 : 调度器从引擎接受 request , 将 request 的指纹存入 redis 的 set 检查是否出现了重复,并将不重复的 request push 写入 redis 的 request queue
Scrapy-redis 请求过程 : 引擎请求 request (Spider 发送出的) 时,调度器从 redis 的 request queue 队列里根据优先级 pop 出一个 request 给引擎,引擎将此 request 发送给 spider 处理
Item Pipeline
Scrapy-redis 存储过程 : 引擎将 (spider 返回的) 爬取到的 Item 发送给 spider 处理; Item Pipeline 将爬取到的 Item 存入 redis 的 Items queue
修改过后的 Item Pipeline 可以很方便的 根据 key 从 item queue 提取 item,从而实现 items processes 集群
Base Spider : 重写后的 RedisSpider 继承了 Spider 和 **RedisMixin (从 redis 中读取 url) ** 两个类
总结
| Back | FazBrowse Home | New Git URL |