Python 数据挖掘与机器学习实战 (41):Python 语言简介 2.8.2

阅读数:1 2020 年 1 月 11 日 17:03

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

(爬虫的工作流程)

内容简介
本书作为数据挖掘和机器学习的读物,基于真实数据集进行案例实战,使用 Python 数据科学库,从数据预处理开始一步步介绍数据建模和数据挖掘的过程。书中主要介绍了数据挖掘的基础知识、基本工具和实践方法,通过循序渐进地讲解算法,带领读者轻松踏上数据挖掘之旅。本书采用理论与实践相结合的方式,呈现了如何使用逻辑回归进行环境数据检测,如何使用 HMM 进行中文分词,如何利用卷积神经网络识别雷达剖面图,如何使用循环神经网络构建聊天机器人,如何使用朴素贝叶斯算法进行破产预测,如何使用 DCGAN 网络进行人脸生成等。本书也涉及神经网络、在线学习、强化学习、深度学习和大数据处理等内容。
本书以人工智能主流编程语言 Python 3 版作为数据分析与挖掘实战的应用工具,从 Pyhton 的基础语法开始,陆续介绍了 NumPy 数值计算、Pandas 数据处理、Matplotlib 数据可视化、爬虫和 Sklearn 数据挖掘等内容。全书共涵盖 16 个常用的数据挖掘算法和机器学习实战项目。通过学习本书内容,读者可以掌握数据分析与挖掘的理论知识及实战技能。
本书内容丰富,讲解由浅入深,特别适合对数据挖掘和机器学习算法感兴趣的读者阅读,也适合需要系统掌握深度学习的开发人员阅读,还适合 Python 程序员及人工智能领域的开发人员阅读。编程爱好者、高校师生及培训机构的学员也可以将本书作为兴趣读物或教材使用。

网络爬虫的基本工作流程,如图 2-8 所示。

(1)选取一部分精心挑选的种子 URL。

(2)将这些 URL 放入待抓取 URL 队列。

(3)从待抓取 URL 队列中取出待抓取的 URL,解析 DNS 并且得到主机的 IP,将 URL 对应的网页下载下来,存储进已下载的网页库中。此外,将这些 URL 放进已抓取的 URL 队列。

(4)分析已抓取的 URL 队列中的 URL,然后解析其他 URL,并且将 URL 放入待抓取的 URL 队列,从而进入下一个循环。

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

图 2-8 爬虫的工作流程

从爬虫的角度对互联网进行划分,如图 2-9 所示。

  • 已下载的未过期网页。
  • 已下载的已过期网页:抓取到的网页实际上是互联网内容的一个镜像与备份。互联网是动态变化的,如果一部分互联网上的内容已经发生了变化,那么抓取到的这部分网页就已经过期了。
  • 待下载的网页:是待抓取的 URL 队列中的那些页面。
  • 可知网页:还没有抓取下来,也没有在待抓取的 URL 队列中,但是可以通过对已抓取的页面或者待抓取的 URL 对应页面分析获取到的 URL,认为是可知网页。
  • 还有一部分网页爬虫是无法直接抓取并下载的,称为不可知网页。

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

图 2-9 互联网的划分

在爬虫系统中,待抓取的 URL 队列是很重要的一部分。待抓取 URL 队列中的 URL 以什么样的顺序排列也是一个很重要的问题,因为这涉及先抓取哪个页面,后抓取哪个页面。而决定这些 URL 排列顺序的方法叫做抓取策略。下面重点介绍几种常见的抓取策略。

  • 深度优先遍历策略:指网络爬虫会从起始页开始,一个链接一个链接地跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。
  • 宽度优先遍历策略:将新下载网页中发现的链接直接插入待抓取 URL 队列的末尾。
  • 反向链接数策略:指一个网页被其他网页链接指向的数量。
  • Partial PageRank 策略:借鉴了 PageRank 算法的思想,即对于已经下载的网页,连同待抓取 URL 队列中的 URL 形成网页集合,计算每个页面的 PageRank 值,计算完之后,将待抓取的 URL 队列中的 URL 按照 PageRank 值的大小进行排序,并按照该顺序抓取页面。
  • OPIC 策略:实际上也是对页面进行重要性打分。对于待抓取的 URL 队列中的所有页面,按照打分情况进行排序。
  • 大站优先策略:对于待抓取的 URL 队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。

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

(1)历史参考策略。

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

(2)用户体验策略。

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

(3)聚类抽样策略。

前面提到的两种更新策略都有一个前提:需要网页的历史信息。这样就存在两个问题:第一,系统要是为每个系统保存多个版本的历史信息,无疑增加了很多的系统负担;第二,要是新的网页完全没有历史信息,就无法确定更新策略。

这种策略认为网页具有很多属性,类似属性的网页,可以认为其更新频率也是类似的。要计算某一个类别网页的更新频率,只需要对这一类网页抽样,以它们的更新周期作为整个类别的更新周期,基本思路如图 2-10 所示。

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

图 2-10 网页聚类抽样策略

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

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

图 2-11 分布式结构

最下面一层是分布在不同地理位置上的数据中心,在每个数据中心里有若干台抓取服务器,而每台抓取服务器上可能部署了若干套爬虫程序,这样就构成了一个基本的分布式抓取系统。

对于一个数据中心内的不同抓取服务器,协同工作的方式有以下两种:

1.主从式(Master-Slave)

主从式的基本结构如图 2-12 所示。

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

图 2-12 主从式结构

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

2.对等式(Peer to Peer)

对等式的基本结构如图 2-13 所示。

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

图 2-13 对等式结构

在这种模式下,所有的抓取服务器在分工上没有不同。每一台抓取服务器都可以从待抓取的 URL 队列中获取 URL,接着求出该 URL 的主域名的 Hash 值 H,然后计算 H mod m(其中 m 是服务器的数量,以图 2-13 为例,m 为 3),计算得到的数就是处理该 URL 的主机编号。

举例:假设对于 URL www.baidu.com,计算其 Hash 值 H=8,m=3,则 H mod m=2,因此由编号为 2 的服务器进行该链接的抓取。假设这时候是 0 号服务器拿到这个 URL,那么它会将该 URL 转给服务器 2,由服务器 2 进行抓取。

这种模式有一个问题,当有一台服务器死机或者添加新的服务器时,所有 URL 的哈希求余的结果都要变化。也就是说,这种方式的扩展性不佳。针对这种情况,又有一种改进方案被提出来,这种改进的方案是用一致性哈希法来确定服务器分工,其基本结构如图 2-14 所示。

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

图 2-14 一致性哈希法

一致性哈希法将 URL 的主域名进行哈希运算,映射为一个范围在 0~232 之间的某个数,然后将这个范围平均地分配给 m 台服务器,根据 URL 主域名哈希运算的值所处的范围来判断由哪台服务器进行抓取。

如果某一台服务器出现问题,那么本该由该服务器负责的网页则按照顺时针顺延,由下一台服务器进行抓取。这样,即使某台服务器出现问题,也不会影响其他的工作。

Python数据挖掘与机器学习实战(41):Python语言简介 2.8.2

购书地址 https://item.jd.com/12623592.html?dist=jd

评论

发布