如何做最好的定向爬虫架构

如何做最好的定向爬虫架构

姓名:郭钟

当前职位:某创业公司担任爬虫工程师

摘要

随着互联网信息的不断发展,信息数据的挖掘技术也不断的发展。网络爬虫技术也随之得到了巨大的发展。而对于内容型驱动的网站来说反扒是一件必不可少的事情。很多网站用

引言

本人在

目录

1、——————URL深度优先策略的再优化2、——————模拟浏览器内核使抓取更强大3、——————适应失效代理ip的管理优化

4、——————URL上下文使开发业务逻辑更加简单5、——————多线程的控制6、——————任务的定时问题7、——————dump出错页面将使调试更加方便8、——————抓取log解决中断抓

9、——————爬虫的jvm参数优化10、—————–建立在hadoop基础上实现分布式

1、URL深度优先策略的再优化

深度优先搜索策略。这种策略的主要思想是,从根节点出发找出叶子节点,以此类推。在一个网页中,选择一个超链接,被链接的网页将执行深度优先搜索,形成单独的一条搜索链。当没有其他超链接时,搜索结束。然而这种自动化URL深度自定义并不能达到业务要求的最佳优先状态。

我们来看传统URL队列模型。图中有一个入口URL“A”解析得到三个跟进URL“B”。传统的抓取顺序如飞机图标标注。每个子入口URL顺序抓取得到“C”。问题出来了。假如需要抓取信息就在C那么第一个C1出来就可去抓取C1的信息了。为什么要迟迟等到B抓取完了才能开始抓取C呢。而且如果根据URL多深度大的话下级URL越积越多。这是对内存的巨大的浪费,所以爬虫容易内存溢出问题也在这里体现了一个方面。

最佳的优化效果得到了一组“”C”。这样就不会产生当前还处理不了但有消耗内存巨大的跟进URL堆积问题。优化后如图。

2、模拟浏览器内核使抓取更强大

网页上需要内容都是

模拟浏览器架构:

1、因为浏览器内核消耗内存较大,需要封装一个内核池WebDriberPool来管理所有的内核,统一创建和关闭。

2、下载器必须对外提供设置JS代码的接口

3、当下载网页时需要执行

4、当爬行模式为代理

3、适应失效代理ip的管理优化对于普通的网站来说我们可能只要设置请求头User-Agent就可以轻易绕过网站服务器的反扒机制。但是对于大型网站可就没这么简单了。它们会通过通过网站流量统计系统和日志分析或者限制IP每秒请求次数来识别爬虫。但是它们怎么防也防不了代理IP的自动轮换访问。目前国内基本不存在所谓的”高匿代理IP”。一些代理IP供应商的失效率也是很高的。几乎找不到永久有效的代理IP。既然没有,何必苦苦寻找。为什么不去适应这种代理IP失效是常态的现状。我们现在可以就提出几点代理IP管理架构上的需求。

假如我们已经购买了某家代理

1

2需要代理本地缓存池,用以缓存有效IP

3

4

5、爬虫抓取过程也是验证过程。有效代理

6、当请求失败后如果该

7、可设置代理

实现框架图如下:

4、URL上下文使开发业务逻辑更加简单

在开发爬虫的时候发现数据库设计的数据常常在单一页面抓不完整。通常需要几个页面或者需要查询一些业务关联

上下文类架构:

1

2、提供支持线程并发安全的全局缓存的键值表

3

4

5

6、爬虫任务完成。自动清除所有上下文缓存信息。

5、多线程的控制

爬虫线程工作周期很长如果在程序的某个阶段发生异常那么以为着之前程序所做的工作将会前功尽弃。所有爬虫多线程应划分为两个部分。一个是专门请求,,容易发生异常。另一部分是“离线处理“的线程就是把下载回来的数据进行抽取、清洗、封装、存储的线程。这部分线程跟业务关系紧密,处理快耗时短。工作有时需要协调、需要使用较多synchronized和线程安全的缓冲队列。建议下载线程和离线处理线程数量比例的4:1。

最后还有一个线程生命周期和爬虫任务相同,它不断轮询

6、任务的定时问题

爬虫任务周期长或者周期短。或业务需要爬虫重复去抓取一些动态数据。这时就需要定时机制。实际上

结合多线程控制和任务定时管理得出如下架构图:

志在山顶的人,不会贪念山腰的风景。

如何做最好的定向爬虫架构

相关文章:

你感兴趣的文章:

标签云: