搜索
查看: 2041|回复: 0

什么是蜘蛛爬行

[复制链接]

674

主题

981

帖子

2485

积分

管理员

本论坛第一帅

Rank: 9Rank: 9Rank: 9

积分
2485

热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2017-12-29 12:05:43 来自手机 | 显示全部楼层 |阅读模式
什么是网络爬虫?
网络爬虫也叫网络蜘蛛,即Web Spider,名字也是非常之形象。                                                
                        
如果把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,一直循环下去,直到把整个网站所有的网页都抓取完为止。
如果把整个互联网就当成一个网站,那么网络蜘蛛可以用这个原理把互联网上所有的网页都抓取下来。

下面主要对爬虫以及抓取系统进行一个简单的概述。


一、网络爬虫的基本结构及工作流程
网络爬虫的基本工作流程如下:
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.深度优先遍历策略
深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。我们以下面的图为例:
遍历的路径:A-F-G  E-H-I B C D
   2.宽度优先遍历策略
   宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以上面的图为例:
   遍历路径:A-B-C-D-E-F G H I
   3.反向链接数策略
   反向链接数是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序。
   在真实的网络环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那个也的重要程度。因此,搜索引擎往往考虑一些可靠的反向链接数。
4.Partial PageRank策略
   Partial PageRank算法借鉴了PageRank算法的思想:对于已经下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每个页面的PageRank值,计算完之后,将待抓取URL队列中的URL按照PageRank值的大小排列,并按照该顺序抓取页面。
   如果每次抓取一个页面,就重新计算PageRank值,一种折中方案是:每抓取K个页面后,重新计算一次PageRank值。但是这种情况还会有一个问题:对于已经下载下来的页面中分析出的链接,也就是我们之前提到的未知网页那一部分,暂时是没有PageRank值的。为了解决这个问题,会给这些页面一个临时的PageRank值:将这个网页所有入链传递进来的PageRank值进行汇总,这样就形成了该未知页面的PageRank值,从而参与排序。下面举例说明:
5.OPIC策略策略
   该算法实际上也是对页面进行一个重要性打分。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P之后,将P的现金分摊给所有从P中分析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面按照现金数进行排序。
6.大站优先策略
   对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。这个策略也因此叫做大站优先策略。

爬虫技术光是听起来就很有意思,那利用这等技术除了做搜索引擎,还能做些什么好玩的事儿呢?
(以下数据摘自其它文章下网友回复)
@森羴
在用Python写网页爬虫之前,我只用来写过了一个驾校约车的脚本,让当时的我不惧上万的学车同僚,在约车环节没有输在起跑线上。
接着那段时间,我女朋友的领导每天下班都会下任务,要收集100条有招聘需求的信息,第二天检查。看到她熬夜百度+复制粘贴到半夜,心疼死了。
想到了某个牛人说:一切重复性的工作都可以用程序来完成。于是偷偷花了些时间研究了下她经常查的某些同类业务网站的页面数据,培育了这只爬虫。主要技能就是爬这些网站的招聘公司信息及联系方式,保存到Excel中。在我将战斗成果----1000多个客户资料的Excel表格发给她的时候,先惊喜,后审问,再感慨!依稀记得那天她发了一条朋友圈,内容是:“有个程序员男朋友,感觉好幸福啊!!”成就感走直线啊,都能让她感到幸福,你说这只爬虫是不是做了很酷很有趣的事情呢?

@柳易寒
我用爬虫爬了我爱白菜网、超值分享汇、发现值得买、惠惠购物、今日聚超值、留住你、买手党、没得比、慢慢买、牛杂网、买个便宜货、什么值得买、天上掉馅饼、一分网、折800值得买、值值值等网站的折扣信息。
这些网站都是提供的一些及时的、性价比较高的商品,很多时候要一个一个网站的看(重度用户),很容易就会错过一些很划算的商品。

@小白
大二学生一枚,前段时间中期考试,成绩一直不出来,又不想每次都登录,突然就像用以下所学的东西来干点事情。
说干就干,花了我将近4个小时完成成绩提醒功能。主要是用Python定时抓取数据(定时用Ubuntu的crontab),分析数据是否变化,然后发送短信。其实大部分时间是花在分析学校模拟登陆那一块了,毕竟要提取各种值,还有url重定向,本来就才学Python,对一些东西也不是很熟悉。
运行起来之后还是效果还不错,10分钟抓一次,第一时间知道了我的概率论。。。

@顾旻玮
在学校的时候做过一个项目,通过爬微博的文字,分析国内各个地区的用户收听虾米的热度和最受欢迎的歌手。当然也没有用什么很复杂的技术,就是写基本的TF-IDF。
做完的时候觉得自己好有想法啊,能实现这么有意思的东西。后来发现早就有公司做过了。当然别人做的是美国版的。
于是现在,我就在这家公司工作。

@孟德超
非计算机系。所以我做的比起其他人来说要简单的多,但是却解决了一些很实用的问题,也让我认识到各行各业的人都需要学一点编程。
我一个同学做数学建模,需要57个城市两两之间的距离。他们本来想在百度查,可是57*56/2=1596,也就是说他们光查数据就要百度1596次。刚好我那个时候接触了一点爬虫,就找到一个可以查询距离的网站,大概写了几十行代码,两分钟就解决问题了。

@余生梦
说个简单实用的例子吧。昨晚突然发现我在某培训网站的的会员马上就要过期了,于是赶紧写了个爬虫,把没看完的教学视频全下载下来了……

@萝莉控夫斯基
我的爱人是某网络公司的销售,需要收集各种企业信息然后打电话联系。于是乎利用采集脚本抓一坨一坨的资料给她用,而她的同事天天自己搜资料整理到半夜。

怎么学习爬虫呢?

Python爬虫还算比较简单的。学习Python爬虫的步骤大概是:
1. 学习Python基本语法,并熟练使用
2. 学习Python中关于爬虫的几个重要的内置库:urllib/http/Cookie等
3. 学习正则表达式,beautifulsoup等解析网页的工具或包
4. 利用上几步学习的至少爬取比较简单的网站,比如一些应用市场等等,不需要登陆
5. 学习利用工具分析网页请求流程、学习模拟登陆,拿新浪微博、知乎等需要登陆的网站进行练习
6. 学习Python中关于多线程、多进程的东西,将以前写的代码改为多线程版本,提高效率
7. 学习Python中的爬虫框架,或者自己写一个爬虫框架。
8.更高级的,还有验证码识别、js动态请求、js执行、代理IP等等。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表