python爬虫设计入门_第1页
python爬虫设计入门_第2页
python爬虫设计入门_第3页
python爬虫设计入门_第4页
python爬虫设计入门_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python爬虫设计入门

重庆大学软件效劳工程实验室余俊良UsingPythonToDesignACrawlerSummarize根本的爬虫工作原理简单爬虫设计入门库:下载网页:urllib,Requests解析网页:BeautifulSoup模拟交互,处理JS动态网页:Selenium高级爬虫框架Scrapy分布式爬虫设计分布式队列布隆过滤器(BloomFilter)网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或假设干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。什么是爬虫批量型爬虫批量型爬虫有明确的抓取范围和目标,当爬虫到达这个设定的目标后,即停止抓取过程。增量型爬虫增量型爬虫会持续不断的抓取,对于抓取的网页,要定期更新。通用的商业搜索引擎爬虫根本都属于此类。垂直型爬虫垂直型爬虫关注特定主题内容或者属于特定行业的网页,其他主题或者其他行业的内容不再考虑范围。爬虫的分类通用爬虫框架根本工作流程网络爬虫的根本工作流程如下:1.首先选取一局部精心挑选的种子URL;2.将这些URL放入待抓取URL队列;3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。从爬虫的角度对互联网进行划分从爬虫的角度对互联网进行划分对应的,可以将互联网的所有页面分为五个局部:1.已下载未过期网页2.已下载已过期网页:抓取到的网页实际上是互联网内容的一个镜像与备份,互联网是动态变化的,一局部互联网上的内容已经发生了变化,这时,这局部抓取到的网页就已经过期了。3.待下载网页:也就是待抓取URL队列中的那些页面4.可知网页:还没有抓取下来,也没有在待抓取URL队列中,但是可以通过对已抓取页面或者待抓取URL对应页面进行分析获取到的URL,认为是可知网页。5.还有一局部网页,爬虫是无法直接抓取下载的。称为不可知网页。抓取策略在爬虫系统中,待抓取URL队列是很重要的一局部。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。下面重点介绍几种常见的抓取策略:

1.深度优先遍历策略

2.宽度优先遍历策略

3.反向链接数策略4.PartialPageRank策略抓取策略depth-first:遍历的路径:A-F-G

E-H-IBCDbreadth-first:遍历的路径:A-B-C-D-E-FGHI网页更新策略

互联网是实时变化的,具有很强的动态性。网页更新策略主要是决定何时更新之前已经下载过的页面。常见的更新策略又以下三种:1.历史参考策略

顾名思义,根据页面以往的历史更新数据,预测该页面未来何时会发生变化。一般来说,是通过泊松过程进行建模进行预测。网页更新策略

2.用户体验策略

尽管搜索引擎针对于某个查询条件能够返回数量巨大的结果,但是用户往往只关注前几页结果。因此,抓取系统可以优先更新那些显示在查询结果前几页中的网页,而后再更新那些后面的网页。这种更新策略也是需要用到历史信息的。用户体验策略保存网页的多个历史版本,并且根据过去每次内容变化对搜索质量的影响,得出一个平均值,用这个值作为决定何时重新抓取的依据网页更新策略

3.聚类抽样策略前面提到的两种更新策略都有一个前提:需要网页的历史信息。这样就存在两个问题:第一,系统要是为每个系统保存多个版本的历史信息,无疑增加了很多的系统负担;第二,要是新的网页完全没有历史信息,就无法确定更新策略。这种策略认为,网页具有很多属性,类似属性的网页,可以认为其更新频率也是类似的。要计算某一个类别网页的更新频率,只需要对这一类网页抽样,以他们的更新周期作为整个类别的更新周期。分布式抓取系统结构

一般来说,抓取系统需要面对的是整个互联网上数以亿计的网页。单个抓取程序不可能完成这样的任务。往往需要多个抓取程序一起来处理。一般来说抓取系统往往是一个分布式的三层结构。如下图:分布式抓取系统结构

最下一层是分布在不同地理位置的数据中心,在每个数据中心里有假设干台抓取效劳器,而每台抓取效劳器上可能部署了假设干套爬虫程序。这就构成了一个根本的分布式抓取系统。对于一个数据中心内的不同抓去效劳器,协同工作的方式有几种:1.主从式〔Master-Slave〕

2.对等式〔PeertoPeer〕主从式抓取系统结构主从式抓取系统结构对于主从式而言,有一台专门的Master效劳器来维护待抓取URL队列,它负责每次将URL分发到不同的Slave效劳器,而Slave效劳器那么负责实际的网页下载工作。Master效劳器除了维护待抓取URL队列以及分发URL之外,还要负责调解各个Slave效劳器的负载情况。以免某些Slave效劳器过于清闲或者劳累。这种模式下,Master往往容易成为系统瓶颈。对等式抓取系统结构对等式抓取系统结构

在这种模式下,所有的抓取效劳器在分工上没有不同。每一台抓取效劳器都可以从待抓取在URL队列中获取URL,然后对该URL的主域名的hash值H,然后计算Hmodm〔其中m是效劳器的数量,以上图为例,m为3〕,计算得到的数就是处理该URL的主机编号。这种模式有一个问题,当有一台效劳器死机或者添加新的效劳器,那么所有URL的哈希求余的结果就都要变化。也就是说,这种方式的扩展性不佳。对等式抓取系统结构

在这种模式下,所有的抓取效劳器在分工上没有不同。每一台抓取效劳器都可以从待抓取在URL队列中获取URL,然后对该URL的主域名的hash值H,然后计算Hmodm〔其中m是效劳器的数量,以上图为例,m为3〕,计算得到的数就是处理该URL的主机编号。这种模式有一个问题,当有一台效劳器死机或者添加新的效劳器,那么所有URL的哈希求余的结果就都要变化。也就是说,这种方式的扩展性不佳。布隆过滤器在构建分布式爬虫时抓取海量网页时,通常需要维护一个很长的已抓取URL集合,防止重复抓取已经下载过的网页。然而即使使用哈希表来构建这个集合,依然面临着冲突和内存利用率不高的缺点。通常的判重做法是使用BloomFilter〔布隆过滤器〕来进行已抓取网页查找。布隆过滤器布隆过滤器〔BloomFilter〕是由布隆〔BurtonHowardBloom〕在1970年提出的。它实际上是由一个很长的二进制向量和一系列无关的哈希函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。即BloomFilter报告某一元素存在于某集合中,但是实际上该元素并不在集合中,但是没有识别错误的情形,如果某个元素在该集合中,那么BloomFilter是不会报告该元素不在集合中的,所以不会漏报。布隆过滤器相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数。另外,Hash函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。Python高级爬虫框架ScrapyScrapy,Python开发的一个快速,高层次的屏幕

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论