爬虫编写
爬虫技术:
基于目标数据模式的爬虫针对的是网页上的数据,所抓取的数据一般要符合一定的模式,或者可以转化或映射为目标数据模式。
爬虫策略:
网页的抓取策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入问题,目前常见的是广度优先和最佳优先方法。在编写爬虫的时候可以考虑使用广度优先和最佳优先的方法。
广度优先搜索策 略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方 法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另外一种方法是将 广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。最佳优先搜索策略按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。它只访问经过网页分析算法预测为“有用”的网页。存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,因为最佳优先策略是一种局部最优搜索算法。因此需要将最佳优先结合具体的应用进行改进,以跳出局部最优点。将在第4节中结合网页分析算法作具体的讨论。研究表明,这样的闭环调整可以将无关网页数量降低30%~90%。
爬虫的行为策略有以下几点:1、选择策略:选择要下载的页面;2、重新访问策略:页面什么时候会更新;3、并行策略:通过分布式抓取获得更好的效果。
爬虫的组成 在网络爬虫的系统框架中, 主过程由控制器,解析器,资源库三部分组成。控制器的主要工作是负责给多线程中的各个爬虫线程分配工作任务。解析器的主要工作是下载网页,进行页面的处 理,主要是将一些JS脚本标签、CSS代码内容、空格字符、HTML标签等内容处理掉,爬虫的基本工作是由解析器完成。资源库是用来存放下载到的网页资 源,一般都采用大型的数据库存储,如Oracle数据库,并对其建立索引。
控制器 控制器是网络爬虫的中央控制器,它主要是负责根据系统传过来的URL链接,分配一线程,然后启动线程调用爬虫爬取网页的过程。
解析器 解析器是负责网络爬虫的主要部分,其负责的工作主要有:下载网页的功能,对网页的文本进行处理,如过滤功能,抽取特殊HTML标签的功能,分析数据功能。
资源库 主要是用来存储网页中下载下来的数据记录的容器,并提供生成索引的目标源。
其他:
URL一般化 爬虫应当执行几种类型的URL规范化来避免重复抓取某些资源。URL一般化也被称为URL标准化,指的是修正URL并且使其前后一致的过程。
爬虫身份识别 网络爬虫通过使用http请求的用户代理字段来向网络服务器表明他们的身份。网络管理员则通过检查网络服务器的日志,使用用户代理字段来辨认哪一个爬虫曾经访问过以及它访问的频率。用户代理字段可能会包含一个可以让管理员获取爬虫更多信息的URL。邮件抓取器和其他怀有恶意的网络爬虫通常不会留任何的用户代理字段内容,或者他们也会将他们的身份伪装成浏览器或者其他的知名爬虫。留下用户标志信息是十分重要的;这样,网络管理员在需要的时候就可以联系爬虫的主人。有时,爬虫可能会陷入爬虫陷阱或者是一个服务器超负荷,这时,爬虫主人需要使爬虫停止。对那些有兴趣了解特定爬虫访问时间网络管理员来讲,用户标识信息是十分重要的。
代码:爬虫有一些是开源的,可以通过学习这些开源代码来更好的理解爬虫并且编写出自己的爬虫。
爬虫编写中要注意的一些问题:
显示状态:在状态栏显示统计作息,排入队列URL数,已下载文件数,已下载总字节数,CPU使用率和可用内存等,便于把握机器当前的状态,根据机器的状态来修改策略,提高效率。
偏好性:针对攫取资源类型设置不同的优先级。
健壮性:设定URL正规化策略以排除冗余下载、爬虫陷阱避免策略的使用等,多种策略以解析相对路径等。
爬虫礼仪:要遵循爬虫禁止协议,避免对服务器资源的过度使用。