-------------------------------------更新:2020年1月13日
从这几天开始我负责搭建企业级的爬虫系统,以下是领导的需求要点:
1、尽量做到减少爬虫开发量,最好使用可视化的方式进行配置,自动生成爬虫代码。
2、做到目标网站每天30万左右请求的采集目标。
针对第一点目前国内做的比较好的是八爪鱼采集系统,采用C/S的软件架构进行采集,另外就是国外厂商Scrapyhub的Potria,也是通过配置,生成Scrapy代码。之前听说腾讯的菩提爬虫框架也要开源了,不过一直没有动静,这里我们暂且不谈。
第二点,就是对于目标网站的纯抓取了,在这样一个采集量下,我们首先要通过一些工具观察网站的DAU情况,访问量不能明显高于目标网站的日常访问量,以免影响对方服务器的正常运行。
在了解目标网站的大概DAU之后,我们就可以开始对采集过程中的账号与每个账号发出的一个请求进行评估。
要做到那么打一个采集量,我们可能会遇到频繁的被禁、这个时候就要使用自动化工具进行滑动验证码等行为了。
而滑动验证码等行为需要运行js函数,通过浏览器进行运行,使用自动化工具操作浏览器有可能是一件很浪费内存的事情。因此,要考虑另起一个进程专门做这个事情,我们可以把这块儿与账号、ip的管理一起称作为“代理池”程序。
代理池程序与爬虫程序通过接口进行信息交换,这样既做到了内存分配方面的解耦,也能让爬虫开发人员专注于页面的抓取逻辑,同时代理池程序用到的自动化工具也可以随时变更,不影响爬虫的运行。
-------------------------------------更新:2020年1月14日
这几天不是很忙,主要在做爬虫技术的相关调研,我估计最后要整理出一个详细设计,以文档的形式进行提交,领导说让我在技术上面做好架构设计。我昨天主要对scrapy-redis进行了分析,看了看puppeteer的应用,在知乎上面有一篇文章讲puppeteer讲的不错,大概是说puppeteer是谷歌团队官方开发的无头浏览器,比selenium这种自动化测试工具要好的多,至于photomjs应该是已经不维护了,很少有人再使用了。
这几天到春节前面,我打算把scrapy-redis的源码看一遍,然后把Twisted以及Tornado这种基于事件驱动的框架再熟悉一下,以你为这两方面基本是python在IO密集型任务能够胜出的优势所在。春节时候我打算继续刷算法题,然后把Django再熟悉熟悉,年后在做项目的时候多对比一下python与java在线程和进程这块的区别,然后在java方面加深学习。
-------------------------------------更新:2020年1月14日
今天主要调研爬虫分布式相关的问题,分布式这边主要是redis的分布式问题。看了一下面试题目中常见的redis问题,主要包括几个方面:
- 基本数据结构string,hash,list,set,zset,比较难的面试会包括zset有序集合的实现。
- 内存容量问题。key的过期删除与惰性删除,以及lru内存淘汰机制,用于让出更多的key值。
- 持久化问题,主要包括快照snapshot与aop追加模式,用于宕机时候的备份恢复。
- 缓存击穿、缓存穿透、缓存雪崩等问题。缓存击穿,经常被查询的key。缓存穿透,高并发访问redis中不存在的值时候,会频繁访问数据库造成数据库宕机,这是解决方案是采用布隆过滤器从最开始告诉请求方,查询结果一定不存在,或使用存储null值方法,阻拦访问数据库。缓存雪崩是指缓存大量时间过期或redis宕机,然后大量请求查询落到数据库中。
- 大key值问题。指的是某个key很大时候出现的问题。
- 分布式问题。主从模式、集群模式,以及key值的hash一致性与hash槽分配问题。
-------------------------------------更新:2020年1月22日
最近终于完成了爬虫框架的整体设计,并完成了领导的设计要求,写了一个三千字的设计文档,可以说是我负责的第一个比较大型的企业级爬虫了。这几天有几个感想。总结如下:
- 框架方面。最近主要新调研了两个爬虫方向的框架。先说puppeteer,它是2017年谷歌开源的自动化测试工具,基于js做的,官方支持chrome浏览器。支持js中的async,await方法。总体感觉后续登录方面的操作选用它和nodejs进行结合,以接口方式提供服务会会是一个不错的选择。第二个是portia框架,是scrapyhub提供的可视化爬虫生成工具,会根据用户点击的页面,自动记录下路径作为抓取项。可以导出为portia和scrapy项目,进行运行。我尝试了一个陕西市税局的网站,这个页面的列表是通过ajax异步传到前端页面的,而portia应该是没有请求出来列表的数据,没能完成抓取。
- 软件工程方面。最近在做爬虫系统的系统设计文档的时候,对画流程图很是头疼,知道找到了可视化工具visual-paradigm,在线就能画各种图。
- 技术深度方面。最近主要要开发我感兴趣的流数据了,要用到flink,领导建议我们看看hdfs的源码部分,我打算好好学习,第一个版本的源码。加油
-------------------------------------更新:2020年2月6日