A spider... ^.^
- Mongodb
- mongoengine
- 支持随机UA
- 构造和Mtime相同的头信息
- 爬取间隔自适应(爬取限制自动增加间隔,恢复正常自动恢复间隔)
- 较详细的日志
- 支持daemon方式启动
- conf.py # 相关mtime设置的api地址,数据库地址,爬取间隔等设置
- beat.py # MQ的任务生产者,通过mtime的搜索接口根据年代遍历,将要爬取的电影的唯一ID列表放到我写的一个简单的消息队列(mongodb)
- worker.py # 使用多进程池类的map方法,模拟多进程并发消费MQ. 每个消息对应不同的爬取任务和爬取的电影IDs
- control.py # 可以将程序放到后台,提供一个类似start/restart/stop模式的功能. 实现简单的crontab
- init.py # 项目开始前执行的初始化,生成beat和worker的执行间隔(在conf.py配置),被他们读取和修改
- models.py # mongodb存储爬下来的电影数据模型
- parse.py # 页面解析
- schedulers.py # 任务执行的数据模型
- show_log.py # 将分布式机器的日志通过一个统一的socket接口汇集起来
- spider.py # 页面爬取
- utils.py # 功能函数
- caoe.py # 豆瓣的CaoE, 父进程死掉后帮助杀掉子进程
- beat.py 按年份获取每年要爬的电影id和库内本年的id取差集,将要爬的放到mongodb的MQ
- worker.py定时从数据库取要爬的电影MQ.
- 从parse.py里面找到实际爬取本次任务的Parse类
- 调用spider.py中对应本次任务的Spider类爬取页面分析
- 使用Xpath解析页面获得分析后的结果
- 获取models里面入库的模型save之
- 根据上面5 获取的数据对AliasName类也去重复累加
- 一次任务完成. 继续重复2
- 初始化任务
$pip install -r requirements.txt
$python init.py
- 产生任务(全局只需要一个)
$python beat.py start
####. 分布式跑任务的每个服务器跑一个worker程序
python work.py start