爬虫概念

通常搜索引擎处理的对象是互联网网页。首先面临的问题是:如何能够设计出高效的下载系统,以将如此海量的网页数据传送到本地,在本地形成互联网网页的镜像备份。网络爬虫即起此作用,它是搜索引擎系统中很关键也很基础的构件。

爬虫,实际上就是通过相应的技术,抓取页面上特定的信息。

1,爬虫框架
  首先从互联网页面中精心选择一部分网页,以这些网页的链接地址作为种子URL,将这些种子URL放入待抓取URL队列中,爬虫从待抓取URL队列依次读取,并将URL通过DNS解析,把链接地址转换为网站服务器对应的IP地址,然后将其和网页相对路径名称交给网页下载器,网页下载器负责页面内容的下载。对于下载到本地的网页,一方面将其存储到页面库中,等待建立索引等后续处理;另一方面将下载的URL放入已抓取URL队列中,这个队列记载了爬虫系统已经下载过的URL以避免重复抓取。对于刚下载的网页,从中抽取所包含的所有链接信息,并在已抓取URL队列中检查,如果发现链接还没有被抓取过,则将这个URL放入待抓取URL队列末尾,在之后的抓取调度中会下载这个URL对应的网页。如此这般形成循环,直到待抓取URL队列为空。

  互联网页面可划分为5个集合:

  已下载的网页集合:爬虫已经从互联网下载到本地进行索引的网页集合

  已过期的网页集合

  待下载的网页集合

  可知的网页集合:这些网页还没有被爬虫下载也没有出现在待抓取URL队列中,不过通过已经抓取的网页或者在待抓取URL队列中的网页,总是可以通过链接关系发现它们

  不可知的网页集合:这些网页对爬虫来说是无法抓取到的。这部分网页所占的比例很高。

2,优秀爬虫的特性
  高性能:主要指爬虫下载网页的抓取速度,高效的数据结构对于爬虫的性能影响很大

  可扩展性

  健壮性:爬虫能够正确处理各种异常情况

  友好性:一是保护网站的部分私密性,二是减少被抓取网站的网络负载

3,网络爬虫研发的目标
  在资源有限的情况下,既然搜索引擎只能抓取互联网现存网页的一部分,那么就尽可能选择比较重要的那部分网页来索引;对于已经抓取到的网页,尽可能快地更新其内容,使得索引网页和互联网对应页面内容同步更新;在此基础上尽可能扩大抓取范围,抓取到更多以前无法发现的网页。

4,抓取策略
  抓取策略的基本目标:优先选择重要的网页进行抓取。

  宽度优先遍历策略:将新下载网页包含的链接直接追加到待抓取URL队列末尾

  非完全PageRank策略:对于已经下载的网页,加上待抓取URL队列中的URL一起,形成网页集合,在此集合内进行PageRank计算,计算完成后,将待抓取URL队列里的网页按照PageRank得分由高到低排序,形成的序列就是爬虫接下来应该依次抓取的URL列表。

  OPIC策略:“在线页面重要性计算”。在算法开始前,每个互联网页面都给予相同的“现金”,每当下载了某个页面P后,P将自己拥有的“现金”平均分配给页面中包含的链接页面,把自己的“现金”清空。而对于待抓取URL队列中的网页,则根据其手头拥有的现金金额多少排序,优先下载现金最充裕的网页。OPIC与PageRank的区别:PageRank每次需要迭代计算,而OPIC策略不需要迭代过程。

  大站优先策略:以网站为单位来衡量网页的重要性。对于待抓取URL队列中的网页,根据所属网站归类,如果哪个网站等待下载的页面最多,则优先下载这些链接。

5,网页更新策略
  任务:决定何时重新抓取之前已经下载过的网页,以尽可能使得本地下载网页和互联网原始页面保持一致。

  历史参考策略:过去频繁更新的网页,未来也会频繁更新。

  用户体验策略:保存网页的多个历史版本,并根据过去每次内容变化对搜索质量的影响,得出一个平均值,以此作为判断爬虫重抓该网页时机的参考依据,对于影响越厉害的网页,则越优先调度重新抓取。

  聚类抽样策略:首先根据网页所表现出的特征,将其聚类成不同的类别,每个类别内的网页具有相似的更新周期。从类别中抽取一部分最有代表性的网页,对这些网页计算其更新周期,那么这个更新周期适用于类别内所有的网页,之后即可根据网页所属类别来决定其更新频率。

6,暗网抓取
  暗网,指目前搜索引擎爬虫按照常规方式很难抓取到的互联网页面。如携程旅行网的机票数据,很难有显式链接指向数据库内的记录,往往是服务网站提供组合查询界面,只有用户按照需求输入查询之后,才可能获得相关数据。

  暗网爬虫的目的是将暗网数据从数据库中挖掘出来,并将其加入到搜索引擎的索引,这样用户在搜索时便可利用这些数据,增加信息覆盖程度。

  查询组合问题:Google对此提出了富含信息查询模版技术。对于某个固定的查询模版来说,如果给模版内每个属性都赋值,形成不同的查询组合,提交给垂直搜索引擎,观察所有返回页面的内容,如果相互之间内容差异较大,则这个查询模版就是富含信息查询模版。Google使用了ISIT算法:首先从一维模版开始,对一维查询模版逐个考察,看其是否富含信息查询模版,如果是则将这个一维模版扩展到二维,再次依次考察对应的二维模版,如此类推,逐步增加维数,直到再也找不到富含信息查询模版为止。

  文本框填写问题:通过人工观察网站进行定位,提供一个与网站内容相关的初始种子查询关键词表,并向垂直搜索引擎提交查询,并下载返回的结果页面。之后从返回结果页面里自动挖掘出相关的关键词,并形成一个新的查询列表,依次将新挖掘出的查询提交给搜索引擎。如此往复,直到无法下载到新的内容为止。

7,分布式爬虫
  分布式爬虫的3个层级:分布式数据中心,分布式抓取服务器及分布式爬虫程序。每个数据中心由多台高速网络连接的抓取服务器构成,而每台服务器又可以部署多个爬虫程序。

  主从式分布爬虫:不同服务器承担不同的角色分工,其中一台专门负责对其他服务器提供URL分发服务,其他机器进行实际的网页下载。URL服务器容易成为整个系统的瓶颈。

  对等式分布爬虫:服务器之间不存在分工差异,每台服务器承担相同的功能,各自负担一部分URL的抓取工作。判断某个URL是否应该由自己来抓取或者将该URL传递给相应的服务器,可对网址的主域名使用哈希取模或一致性哈希方法。

时间: 2024-10-08 17:33:40

爬虫概念的相关文章

爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二)

先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 不多说,直接上代码. 编写代码 运行 <!DOCTYPE html><html><head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><meta http-equiv="Content-Type" content="text/html; c

爬虫概念与编程学习之如何爬取网页源代码(一)

直接,去看一个网页的源代码,这个很简单! 1.新建maven项目 2.选择代码保存位置 3.选择quickstart 4.设置Group Id和Artifact Id 5.得到新建好的maven项目 pom.xml里需要自行添加(httpclient 4.4   .htmlcleaner 2.10 ) 设置好pom.xml配置文件 最后的pom.xml文件为 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=

JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫

JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接,可以看到什么样的效果 package com.lgl.socket; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; publ

什么是Python网络爬虫?带你爬向顶峰

首先我们来介绍一下什么是Python网络爬虫,先大概了解一下关于Python网络爬虫的相关知识点. Python作为一门入门简单,功能强大的,库类完善的语言,身受广大猿友们的喜欢.本身对Python也是非常有好感的,所以时不时的逛逛有关Python的网站啥的.通过在各大Python学习群和论坛的学习,我发现学习Python的人大部分都对网络爬虫很感兴趣.下面给各位介绍下Python的学习流程,并且会给出对应的学习教程. 第一步--学习Python 不管你有没有编程语言基础,也不管你其他语言是多厉

增量式爬虫

目录 增量式爬虫 增量式爬虫 案例: 爬取4567tv网站中所有的电影详情数据 需求:爬取糗事百科中的段子和作者数据. 增量式爬虫 当我们在浏览相关网页的时候会发现,某些网站定时会在原有网页数据的基础上更新一批数据,例如某电影网站会实时更新一批最近热门的电影.小说网站会根据作者创作的进度实时更新最新的章节数据等等.那么,类似的情景,当我们在爬虫的过程中遇到时,我们是不是需要定时更新程序以便能爬取到网站中最近更新的数据呢? 增量式爬虫 概念:通过爬虫程序监测某网站数据更新的情况,以便可以爬取到该网

增量式爬虫案列

增量式爬虫 引言: 当我们在浏览相关网页的时候会发现,某些网站定时会在原有网页数据的基础上更新一批数据,例如某电影网站会实时更新一批最近热门的电影.小说网站会根据作者创作的进度实时更新最新的章节数据等等.那么,类似的情景,当我们在爬虫的过程中遇到时,我们是不是需要定时更新程序以便能爬取到网站中最近更新的数据呢? 一.增量式爬虫 概念:通过爬虫程序监测某网站数据更新的情况,以便可以爬取到该网站更新出的新数据. 如何进行增量式的爬取工作: 在发送请求之前判断这个URL是不是之前爬取过 在解析内容后判

增量式 爬虫

# 增量式 爬虫 概念: 监测网站的数据更新的情况,只爬取网站更新的数据. 核心: 去重 实现 Redis  set集合也行 --  如何实现redis去重? -- # 爬取电影站的更新数据 url去重 https://www.4567tv.tv/frim/index1.html# 下面代码以 http://www.922dyy.com/dianying/dongzuopian/ 为例 作为起始页 # spider.py 爬虫文件 # -*- coding: utf-8 -*- import s

爬虫 + 数据分析 - 7 CrawlSpider(全站爬取), 分布式, 增量式爬虫

一.全站爬取(CrawlSpider) 1.基本概念 作用:就是用于进行全站数据的爬取 - CrawlSpider就是Spider的一个子类 - 如何新建一个基于CrawlSpider的爬虫文件 - scrapy genspider -t crawl xxx www.xxx.com - LinkExtractor连接提取器:根据指定规则(正则)进行连接的提取 - Rule规则解析器:将链接提取器提取到的链接进行请求发送,然后对获取的页面数据进行 指定规则(callback)的解析 - 一个链接提

Redis实现分布式爬虫

redis分布式爬虫 概念:多台机器上可以执行同一个爬虫程序,实现网站数据的爬取 原生的scrapy是不可以实现分布式爬虫, 原因如下: 调度器无法共享 管道无法共享 scrapy-redis组件:专门为scrapy开发的一套组件. 该组件可以让scrapy实现分布式 pip install scrapy-redis 分布式爬取的流程: 1 redis配置文件的配置 将 bind 127.0.0.1 进行注释 将 protected-mode no 关闭保护模式 2 redis服务器的开启:基于