【数学之美系列六】 图论和网络爬虫 (Web Crawlers)

转载 2007年10月05日 03:35:00
2006年5月15日 上午 07:15:00
发表者: 吴军,Google 研究员

[离散数学是当代数学的一个重要分支,也是计算机科学的数学基础。它包括数理逻辑、集合论、图论和近世代数四个分支。数理逻辑基于布尔运算,我们已经介绍 过了。这里我们介绍图论和互联网自动下载工具网络爬虫 (Web Crawlers) 之间的关系。顺便提一句,我们用 Google Trends 来 搜索一下“离散数学”这个词,可以发现不少有趣的现象。比如,武汉、哈尔滨、合肥和长沙市对这一数学题目最有兴趣的城市。]

我们上回谈到了如何建立搜索引擎的索引,那么如何自动下载互联网所有的网页呢,它要用到图论中的遍历(Traverse) 算法。

图论的起源可追溯到大数学家欧拉(Leonhard Euler)。1736 年欧拉来到德国的哥尼斯堡(Konigsberg,大哲学家康德的故乡,现 在是俄罗斯的加里宁格勒),发现当地市民们有一项消遣活动,就是试图将下图中的每座桥恰好走过一遍并回到原出发点,从来没有人成功过。欧拉证明了这件事是 不可能的,并写了一篇论文,一般认为这是图论的开始。

图论中所讨论的的图由一些节点和连接这些节点的弧组成。如果我们把中国的城市当成节点,连接城市的国道当成弧,那么全国的公路干线网就是图论中所说的图。 关于图的算法有很多,但最重要的是图的遍历算法,也就是如何通过弧访问图的各个节点。以中国公路网为例,我们从北京出发,看一看北京和哪些城市直接相连, 比如说和天津、济南、石家庄、南京、沈阳、大同直接相连。我们可以依次访问这些城市,然后我们看看都有哪些城市和这些已经访问过的城市相连,比如说北戴 河、秦皇岛与天津相连,青岛、烟台和济南相连,太原、郑州和石家庄相连等等,我们再一次访问北戴河这些城市,直到中国所有的城市都访问过一遍为止。这种图 的遍历算法称为“广度优先算法”(BFS),因为它先要尽可能广地访问每个节点所直接连接的其他节点。另外还有一种策略是从北京出发,随便找到下一个要访 问的城市,比如是济南,然后从济南出发到下一个城市,比如说南京,再访问从南京出发的城市,一直走到头。然后再往回找,看看中间是否有尚未访问的城市。这 种方法叫“深度优先算法”(DFS),因为它是一条路走到黑。这两种方法都可以保证访问到全部的城市。当然,不论采用哪种方法,我们都应该用一个小本本, 记录已经访问过的城市,以防同一个城市访问多次或者漏掉哪个城市。

现在我们看看图论的遍历算法和搜索引擎的关系。互联网其实就是一张大图,我们可以把每一个网页当作一个节点,把那些超链接(Hyperlinks)当作连 接网页的弧。很多读者可能已经注意到,网页中那些蓝色的、带有下划线的文字背后其实藏着对应的网址,当你点下去的的时候,浏览器是通过这些隐含的网址转到 相应的网页中的。这些隐含在文字背后的网址称为“超链接”。有了超链接,我们可以从任何一个网页出发,用图的遍历算法,自动地访问到每一个网页并把它们存 起来。完成这个功能的程序叫做网络爬虫,或者在一些文献中称为"机器人"(Robot)。世界上第一个网络爬虫是由麻省理工学院 (MIT)的学生马休. 格雷(Matthew Gray)在 1993 年写成的。他给他的程序起了个名字叫“互联网漫游者”("www wanderer")。以后的网络爬虫 越写越复杂,但原理是一样的。

我们来看看网络爬虫如何下载整个互联网。假定我们从一家门户网站的首页出发,先下载这个网页,然后通过分析这个网页,可以找到藏在它里面的所有超链接,也 就等于知道了这家门户网站首页所直接连接的全部网页,诸如雅虎邮件、雅虎财经、雅虎新闻等等。我们接下来访问、下载并分析这家门户网站的邮件等网页,又能 找到其他相连的网页。我们让计算机不停地做下去,就能下载整个的互联网。当然,我们也要记载哪个网页下载过了,以免重复。在网络爬虫中,我们使用一个称为 “哈希表”(Hash Table)的列表而不是一个记事本纪录网页是否下载过的信息。

现在的互联网非常巨大,不可能通过一台或几台计算机服务器就能完成下载任务。比如雅虎公司(Google 没有公开公布我们的数目,所以我这里举了雅虎的 索引大小为例)宣称他们索引了 200 亿个网页,假如下载一个网页需要一秒钟,下载这 200 亿个网页则需要 634 年。因此,一个商业的网络爬虫 需要有成千上万个服务器,并且由快速网络连接起来。如何建立这样复杂的网络系统,如何协调这些服务器的任务,就是网络设计和程序设计的艺术了。

http://googlechinablog.com/2006/05/web-crawlers.html  

Python3网络爬虫实战案例

主讲老师: 崔庆才 ,静觅博客博主,Python技术控,爬虫博文访问量已过百万。喜欢钻研,热爱生活,乐于分享。 个人博客:静觅 | http://cuiqingcai.com/ 适用人群: 萌新小白:我连爬虫也不知道是什么 入门菜鸟:我对一些爬虫的用法还不是很熟练 老司机:我想学习更高级的框架及分布式 从环境基础到进阶分布式,由浅入深,逐篇递进。
  • 2017年04月19日 19:02

【读书笔记】数学之美-第9章图论与网络爬虫

构建网络爬虫的工程要点: (1)用BFS还是DFS? 理论上,即不考虑时间因素和互联网静态不变的情况下,我们认为两者能够在大致的时间里完成所有的整个静态网页的爬取工作。 但工程上,做不到,网络爬虫更应...
  • litoupu
  • litoupu
  • 2014-02-24 21:19:58
  • 1166

图论和网络爬虫 (Web Crawlers)

[离散数学是当代数学的一个重要分支,也是计算机科学的数学基础。它包括数理逻辑、集合论、图论和近世代数四个分支。数理逻辑基于布尔运算,我们已经介绍过了。这里我们介绍图论和互联网自动下载工具网络爬虫 (W...
  • gqm1982
  • gqm1982
  • 2007-04-18 20:31:00
  • 594

数学之美系列 -- 图论和网络爬虫 (Web Crawlers)

数学之美系列 -- 图论和网络爬虫 (Web Crawlers)发表者: 吴军,Google 研究员 [离散数学是当代数学的一个重要分支,也是计算机科学的数学基础。它包括数理逻辑、集合论、图论和近世代...
  • Suprman
  • Suprman
  • 2007-01-13 14:47:00
  • 1902

Google 黑板报 -- 数学之美 系列

Google 黑板报 -- 数学之美 系列Google 黑板报 -- 数学之美 系列一 -- 统计语言模型 Google 黑板报 -- 数学之美 系列二 -- 谈谈中文分词 Google 黑板报 --...
  • lyflower
  • lyflower
  • 2006-12-21 15:07:00
  • 3231

数学之美 系列六 -- 图论和网络爬虫 (Web Crawlers)

发表者: 吴军,Google 研究员 [离散数学是当代数学的一个重要分支,也是计算机科学的数学基础。它包括数理逻辑、集合论、图论和近世代数四个分支。数理逻辑基于布尔运算,我们已经介绍过了。这里我们介绍...
  • pengjetty
  • pengjetty
  • 2006-11-13 21:48:00
  • 436

数学之美系列六 -- 图论和网络爬虫 (Web Crawlers)(转载)

数学之美系列六 -- 图论和网络爬虫 (Web Crawlers)(转载) 发表者: 吴军,Google 研究员 [离散数学是当代数学的一个重要分支,也是计算机科学的数学基础。它包括数理逻辑、集合论、...
  • cmu_hua
  • cmu_hua
  • 2007-06-17 18:05:00
  • 568

数学之美 系列六 图论和网络爬虫 (Web Crawlers)

 发表者: 吴军,Google 研究员 [离散数学是当代数学的一个重要分支,也是计算机科学的数学基础。它包括数理逻辑、集合论、图论和近世代数四个分支。数理逻辑基于布尔运算,我们已经介绍过了。这里我们介...
  • xiaoliangbuaa
  • xiaoliangbuaa
  • 2007-01-05 21:07:00
  • 387

数学之美系列(六) 之 图论和网络爬虫 (Web Crawlers)

数学之美系列六 -- 图论和网络爬虫 (Web Crawlers)2006年5月15日 上午 07:15:00uT("time114733040963327560");发表者: 吴军,Google 研...
  • pengpengfly
  • pengpengfly
  • 2008-09-23 22:25:00
  • 417

数学之美 系列六 – 图论和网络爬虫 (Web Crawlers)

数学之美系列六 -- 图论和网络爬虫 (Web Crawlers)2006年5月15日 上午 07:15:00uT("time114733040963327560");发表者: 吴军,Google 研...
  • peter1_jiang
  • peter1_jiang
  • 2007-09-28 16:55:00
  • 383
收藏助手
不良信息举报
您举报文章:【数学之美系列六】 图论和网络爬虫 (Web Crawlers)
举报原因:
原因补充:

(最多只允许输入30个字)