你真的了解网络爬虫吗?

Google 与 Yahoo 等网站的背后,都有一个强大的网页收集程序,可以将全世界的网页通通抓回去储存以便提供搜寻之用,这个程式就称为 "爬虫 (Crawler)",也有人索性称为蜘蛛 (Spider),因为这个就好像在网络上爬来爬去的蜘蛛一样,到处抓网页回家放。 那么到底什么是网络爬虫呢?橙子君就和大家一起来探究一下“网络爬虫吧”,希望对大家有所帮助。

网络爬虫是什么?

  • 维基百科关于网络爬虫的定义

网络蜘蛛(Web spider)也叫网络爬虫(Web crawler),蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。 网络爬虫始于一张被称作种子的统一资源地址(URLs)列表。当网络爬虫访问这些统一资源定位器时,它们会甄别出页面上所有的超链接,并将它们写入一张"待访列表",即所谓"爬行疆域"(crawl frontier)。此疆域上的统一资源地址将被按照一套策略循环访问。如果爬虫在他执行的过程中复制归档和保存网站上的信息,这些档案通常储存,使他们可以被查看。阅读和浏览他们的网站上实时更新的信息,并保存为网站的“快照”。大容量的体积意味着网络爬虫只能在给定时间内下载有限数量的网页,所以要优先考虑其下载。高变化率意味着网页可能已经被更新或者删除。一些被服务器端软件生成的URLs(统一资源定位符)也使得网络爬虫很难避免检索到重复内容。

简单点说,网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。

网络爬虫的工作原理

网络就是指互联网上的所有网站,各大搜索引擎都会派出它自己的爬虫程序,然后进入到互联网上去抓取,把抓取到的所有内容存到它的网页内容库里面,然后在内容库里面再通过索引程序做一个索引库,最终展现在用户面前的只有一个简单的搜索框,然后用户通过搜索框输入一个关键词,然后就会马上快速的去找到对应的内容,找到之后就会展现出来给用户看,这就是一个搜索引擎爬虫的工作原理。

网络爬虫的抓取策略

在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什麽样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。网页的抓取策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。

  • 广度优先搜索策略 广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该演算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随著抓取网页的增多,大量的无关网页将被下载并过滤,演算法的效率将变低。
  • 最佳优先搜索策略 最佳优先搜索策略按照一定的网页分析演算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。它只访问经过网页分析演算法预测为「有用」的网页。存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,因为最佳优先策略是一种局部最优搜索演算法。因此需要将最佳优先结合具体的应用进行改进,以跳出局部最优点。研究表明,这样的闭环调整可以将无关网页数量降低30%~90%。

一种分布式网络爬虫的架构设计

网络爬虫的基本步骤

通常把爬虫爬取资源分成一下几个步骤:url-crawling(链接抓取),info-crawling(信息抓取),format&fusion(规整与聚合)。 具体执行顺序为: * 1.获取目标路径 * 2.创建一个URL对象,将目标路径传递过去 * 3.建立一个和URL相关的链接 * 4.有的网站有反爬虫机制,这个时候需要我们伪装成为一个浏览器:设置User Agent * 5. 通过链接获取一个输入流,开始抓取网站上的信息 * 6.利用数据库或者json等将网站信息保存,并且读取出来 * 7.关闭流 以下是网络爬虫抓取网页的架构及流程图:

原文发布于微信公众号 - Python中文社区(python-china)

原文发表时间:2016-09-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯IVWEB团队的专栏

ESLint 可共享配置发布,团队自定义 ESLint 规则新鲜出炉

为了更好的统一团队的 JS 编程风格和代码质量。feflow 官方经过调研和探索,终于迎来了ESLint 的解决方案,最核心的理念是:基于 eslint:rec...

3990
来自专栏码洞

深度解析某头条的一道面试题

请问,如果实时展现热门文章,比如近8小时点击量最大的文章前100名。 如果是你来开发这个功能,你怎么做?

902
来自专栏机器学习算法与Python学习

原创:scikit-learn 在Ubuntu上环境的搭建详解

之前一直想在Ubuntu下搭建一个机器学习的框架,由于忙于各种事情一直拖到先在。终于在上周成功的在Ubuntu下搭建了scikit-learn的学习矿机。 首先...

3335
来自专栏不止思考

架构设计之「服务隔离」

那什么是「服务隔离」呢? 顾名思义,它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块...

1503
来自专栏腾讯技术工程官方号的专栏

计费监控优化系列:TDSQL监控优化

我们从两个阶段分别着手对TDSQL监控进行整合优化,阶段一:对现有的监控逻辑进行梳理,整理解决现有痛点。阶段二:引入新的监控算法,如趋势性算法、突变算法、推理算...

2793
来自专栏PPV课数据科学社区

数据加学堂:大熊学python3爬虫–scrapy浅探(三)

? 在新手上路(三)贴过一段代码,就是爬取问吧里面的question 问题,answer回答,topic话题标签,source问题来自哪个板块。 有一种有一种...

2997
来自专栏aCloudDeveloper

DPDK 全面分析

高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁...

1.1K4
来自专栏鸿的学习笔记

事务的处理

事务应该是数据库提供给应用程序的,并且为了隐藏并行问题和软硬件会发生的错误,而使用的一种抽象。下图中提到的方法包含了几个前提,那就是时钟是相对可靠的...

903
来自专栏JAVA高级架构

分布式架构--基本思想汇总

881
来自专栏应兆康的专栏

我们能用云函数做什么?

现如今云计算时代渐渐出现了越来越多的新型模式,从IaaS、PaaS、SaaS到CaaS,再到的微服务架构,都在试着将各种软、硬件资源或抽象的事物做为一种服务提供...

1.2K4

扫码关注云+社区

领取腾讯云代金券