测试之道--网络爬虫系列2(爬虫技术及原理)
来源:互联网 发布:方知父母恩上一句 编辑:程序博客网 时间:2024/06/08 03:49
通用网络爬虫原理
1)获取初始的URL:可以用户人为指定一个或者多个URL
2)根据初始的URL爬取页面并获得新的URL:首先爬取初始URL网页,将网页存储到原始数据库的同时获取网页中的新的URL地址,将新的URL存放到待爬取URL列表中,并将已经爬取的URL放到已爬取URL列表中,目的是用于去重及判断爬取的进程。
3)重复步骤2直至满足爬虫系统设置的停止条件时,停止爬取。聚焦网络爬虫原理
1)对爬取目标定义和描述。
2)获取初始URL。
3)根据初始URL爬取页面,并获得新的URL。
4)从新的URL中过滤掉与爬取目标无关的URL:将新获取的URL过滤后存放到待爬取URL列表中,并将已经爬取的URL放到已爬取URL列表中,目的是用于去重及判断爬取的进程。
5)在待爬取的URL列表中,根据搜索算法(事先确定的某种爬取规则)制定优先级,确定下一步爬取的URL。
6)爬取上一步骤确定的优先级最高的URL,重复上面步骤,直至满足系统设置的停止条件,或者无法获取新的URL地址时停止爬行。常见爬虫的爬取策略
在待爬取的URL列表中,可能会有很多URL地址,在通用网络爬虫中,爬取顺序没那么重要,但是在聚焦网络爬虫中,爬取的顺序非常重要,爬取URL的顺序是由爬行策略决定。
1)深度优先爬行策略
首先爬取一个网页,然后将这个网页的下层链接依次深入爬取完后再返回上一层进行爬取,上图若按照深度优先策略从节点1开始爬行顺序为:1-2-4-8-9-5-10-11-3-6-12-13-7就类似于二叉树的先根遍历。
2)广度优先爬行策略
首先会爬取同一层次的网页,然后去爬取下一层次的网页,上图若按照广度优先策略从节点1开始爬行顺序为:1-2-3-4-5-6-7-8-9-10-11-12-13。
3)大站爬行策略
我们可以按对应网页所属站点进行分类,如果某个网站的网页数量多就称其为大站,此法会优先爬取大站中的url地址。
4)反链策略
网页的反链接数是该网页被其他网页指向的次数,优先爬取反链数大的网站(要避免那些垃圾站点相互链接提高反链数的作弊站点,要考虑可靠的反链数)。网页更新策略
爬虫爬取网站的频率与网页的更新频率越接近效果越好,当爬虫服务器资源有限时要根据相应的策略让不同网页也具有不同更新优先级,优先级高的网站获取较快的爬取响应,即更新优先级(按一定策略设置)越高的网页,爬虫去爬取的频率就会越高。
1)用户体验策略:大部分用户只会关注搜索出的排名靠前的网页,那么我们的爬虫就可以给这些网页设置较高的更新优先级,在这种策略中爬虫会搜集对应应网页的多个历史版本的内容更新、搜索质量影响、用户体验等信息,根据这些信息综合确定对应网页的爬取周期。
2)历史数据策略:依据某一个网页的历史更新数据,通过泊松过程进行建模等手段,预测下一次更新时间,从而确定网页的更新周期。
3)聚类分析策略:上面两种方法都需要保存相应网页的历史版本数据,会加大爬虫服务器负载 ,或者是新网页无历史版本信息时上面两种方法就不可取;聚类分析是依据网页之间的共性进行分析,共性较多的聚为一类,为每一类确定一个网页更新优先级(爬取周期),具体做法 如下:
(1)首先大量研究表明,具有类似属性的网页,其更新频率类似,在上面的指导思想的基础上我们可以首先对海量网页进行聚类分析,再在每一类中的网页进行抽样,求其平均值,然后确定每一类网页的爬取频率。metaseeker是一款比较实用的网页采集程序,使用改程序可以让大家比较快速、形象的了解爬虫的工作过程。
- 测试之道--网络爬虫系列2(爬虫技术及原理)
- 测试之道--网络爬虫系列1
- 测试之道--网络爬虫系列5(cookie处理)
- 测试之道--网络爬虫系列3(urllib库介绍)
- 测试之道--网络爬虫系列4(http协议请求实战)
- 小曹谈技术之网络爬虫
- 搜索引擎技术之网络爬虫
- 网络爬虫实现原理与实现技术
- Python爬虫系列之----Scrapy(一)爬虫原理
- 网络爬虫系列之三:简单爬虫初步
- 网络爬虫之Scrapy 原理介绍
- 网络蜘蛛爬虫原理
- 网络爬虫原理
- 网络爬虫工作原理
- 网络爬虫原理
- 网络爬虫实现原理
- 网络爬虫原理
- 网络爬虫原理
- 分享一个Android内存泄漏相关的自动测试脚本
- android基于PullToRefreshListView 的支持嵌套滚动的下拉刷新实现--PullToRefreshAttacher
- 虚幻4中的程序化生成【2】程序化生成藤曼
- springboot学习
- ajax中文乱码问题的总结
- 测试之道--网络爬虫系列2(爬虫技术及原理)
- 将图像转换为文字显示
- 【翻译】[SQL]Table 变数不能建立Index 吗 ?
- APP瘦身之webp实践
- 最简单的push设置自定义backBarButtonItem(文字、图片、图文)
- Qt常用类QDialog
- PHP笔记
- 51Nod 1358 浮波那契 (矩阵快速幂 构造矩阵)
- java继承extends与super关键字理解