html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video { margin: 0; padding: 0; border: 0 }
body { font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 1.6; color: #333; background-color: #fff; padding: 20px; max-width: 960px; margin: 0 auto }
body>*:first-child { margin-top: 0 !important }
body>*:last-child { margin-bottom: 0 !important }
p,blockquote,ul,ol,dl,table,pre { margin: 15px 0 }
h1,h2,h3,h4,h5,h6 { margin: 20px 0 10px; padding: 0; font-weight: bold }
h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 code,h5 tt,h5 code,h6 tt,h6 code { font-size: inherit }
h1 { font-size: 28px; color: #000 }
h2 { font-size: 24px; border-bottom: 1px solid #ccc; color: #000 }
h3 { font-size: 18px }
h4 { font-size: 16px }
h5 { font-size: 14px }
h6 { color: #777; font-size: 14px }
body>h2:first-child,body>h1:first-child,body>h1:first-child+h2,body>h3:first-child,body>h4:first-child,body>h5:first-child,body>h6:first-child { margin-top: 0; padding-top: 0 }
a:first-child h1,a:first-child h2,a:first-child h3,a:first-child h4,a:first-child h5,a:first-child h6 { margin-top: 0; padding-top: 0 }
h1+p,h2+p,h3+p,h4+p,h5+p,h6+p { margin-top: 10px }
a { color: #4183C4; text-decoration: none }
a:hover { text-decoration: underline }
ul,ol { padding-left: 30px }
ul li>:first-child,ol li>:first-child,ul li ul:first-of-type,ol li ol:first-of-type,ul li ol:first-of-type,ol li ul:first-of-type { margin-top: 0px }
ul ul,ul ol,ol ol,ol ul { margin-bottom: 0 }
dl { padding: 0 }
dl dt { font-size: 14px; font-weight: bold; font-style: italic; padding: 0; margin: 15px 0 5px }
dl dt:first-child { padding: 0 }
dl dt>:first-child { margin-top: 0px }
dl dt>:last-child { margin-bottom: 0px }
dl dd { margin: 0 0 15px; padding: 0 15px }
dl dd>:first-child { margin-top: 0px }
dl dd>:last-child { margin-bottom: 0px }
pre,code,tt { font-size: 12px; font-family: Consolas, "Liberation Mono", Courier, monospace }
code,tt { margin: 0 0px; padding: 0px 0px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8 }
pre>code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent }
pre { background-color: #f8f8f8; border: 1px solid #ccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px }
pre code,pre tt { background-color: transparent; border: none }
kbd { background-color: #DDDDDD; background-image: linear-gradient(#F1F1F1, #DDDDDD); background-repeat: repeat-x; border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD; border-style: solid; border-width: 1px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; line-height: 10px; padding: 1px 4px }
blockquote { border-left: 4px solid #DDD; padding: 0 15px; color: #777 }
blockquote>:first-child { margin-top: 0px }
blockquote>:last-child { margin-bottom: 0px }
hr { clear: both; margin: 15px 0; height: 0px; overflow: hidden; border: none; background: transparent; border-bottom: 4px solid #ddd; padding: 0 }
table th { font-weight: bold }
table th,table td { border: 1px solid #ccc; padding: 6px 13px }
table tr { border-top: 1px solid #ccc; background-color: #fff }
table tr:nth-child(2n) { background-color: #f8f8f8 }
img { max-width: 100% }
网络爬虫实现原理与实现技术
网络爬虫实现原理详解
通用网络爬虫
实现原理及过程1. 获取初始的URL。初始的URL地址可以由用户人为地指定,也可以由用户指定的某个或某几个初始爬取网页决定。
2. 根据初始的URL爬取页面并获得新的URL。获得初始的URL地址之后,首先需要爬行对应URL地址中的网页,爬取了对方的URL地址中的网页后,将网页存储到原始数据库中,并且在爬取网页的同时,发现新的URL地址,同时将已爬取的URL地址存放在一个URL列表中,用于去重及判断爬取的进程。
3. 将新的URL放到URL队列中。在第二步中,获取了下一个新的URL地址之后,会将新的URL地址放到URL队列中。
4. 从URL队列中读取新的URL,并依据新的URL爬取网页,同时从新网页中获取新的URL,并重复上述的爬取过程。
5. 满足爬虫系统设置的停止条件是,停止爬取。在编写爬虫的时候,一般会设置相应的停止条件。如果没有设置停止条件,爬虫则会一直爬取下去,一直到无法获取新的URL地址为止,若设置了停止条件,爬虫则会在停止条件满足是停止爬取。
聚焦网络爬虫
1. 对爬取目标的定义和描述。在聚焦网络爬虫中,我们首先要依据爬取需求定义该聚焦网络爬虫爬取的目标,以及进行相关的描述。
2. 获取初始的URL。3. 根据初始的URL爬取页面,并获得新的URL4. 从新的URL中过滤掉与爬取目标无关的链接。因为聚焦网络爬虫对网页的爬取室友目的性的,所以与目标无关的网页将会被过滤掉。同时,也需要将已爬取的URL地址存放到一个URL列表总,用于去重和判断爬取的进程。
5. 将过滤后的链接放到URL队列中。
6. 从URL队列中,根据搜索算法,确定URL的优先级,并确定下一步要爬取的URL地址。在通用网络爬虫中,下一步爬取那些URL地址,是不太重要的,但是在聚焦网络爬虫中,由于其目的性,故而下一步爬取哪些URL地址相对来说是比较重要的。对于聚焦网络爬虫来说,不同的爬取顺序,可能导致爬虫的执行效率不同,所以,我们需要依据搜索策略来确定下一步需要爬取哪些URL地址。
7. 从下一步要爬取的URL地址中,读取新的URL,然后依据新的URL地址爬取网页,并重复上述爬取过程。
8. 满足系统中设置的停止条件时,或无法获取新的URL地址时,停止爬行。
爬行策略
爬行策略主要有,深度优先爬行策略,广度优先爬行策略、大站优先策略、反链策略、其他爬行策略等。
深度广度很好理解。从大站优先开始。
我们可以对应网站所属的站点进行归类,如果某个网站的网页数量多,那么我们则将其称为大站,按照这种策略,网页数量越多的网站越大,然后优先爬取大站中的网页URL地址。
一个网页的反向链接数,指的是该网页被其他网页指向的次数,这个次数在一定程度张代表着该网页被其他网页的推荐次数。所以,如果按反链策略去爬行的话,那么哪个网页的反链数量越多,则哪个网页将被优先爬取。但是,在实际情况中,如果单纯按反链策略去决定一个网页的优先程度的话,那么可能会出现大量的作弊情况。比如,做一些垃圾站群,并将这些网站互相链接,如果这样的话,每个站点都将获得较高的反链,从而达到作弊的目的。作为爬虫项目方,我们当然不希望收到这种作弊行为的干扰,所以,如果采用反向链接策略去爬取的话,一般会考虑可靠的反链数。
其他爬行策略,OPIC策略,Partial PageRank策略。
网页更新策略
网页更新策略主要有3种:用户体验策略、历史数据策略、聚类分析策略等。
1. 用户体验策略
在搜索引擎查询关键词时,会出现一个排名结果,通常会有大量的网页,大部分用户只关心排名靠前的网页。所以在爬虫服务器资源有限的情况下,爬虫会优先更新排名靠前的网页,这种更新策略就叫用户体验策略,爬取周期的确定,爬取中会保留对应网页的多个历史版本,并进行分析,依据多个历史版本的内容更新、搜索质量的影响、用户体验等信息,来确定对这些网页的爬取周期。
2. 历史数据策略
我们可以依据某一个网页的历史更新数据,通过泊松过程进行建模等手段,预测该网页下一次更新的时间,从而确定下一次改网页的爬取的时间,即确定更新周期。
3.聚类分析策略聚类分析就是根据网页的共有属性进行分类
以上两种策略都需要历史数据进行分析,若一个网页为新网页,则不会有对应的历史数据。并且,如果要依据历史数据进行分析,则需要爬虫服务器保存对应网页的历史版本信息,给服务器带来更多的压力和负担。所以这时候我们就用聚类分析策略。
1. 首先,经过大量的研究发现,网页可能具有不同的内容,但是一般来说,具有类似属性的网页,其更新频率类似。这是聚类分析算法运用在爬虫网页的更新上的一个前提指导思想。
2. 有了1中的指导思想后,我们可以首先对海量的网页进行聚类分析,在聚类分析之后会形成多个类,每个类中的网页具有类似的属性,即一般具有类似的更新频率。
3. 聚类完成后,我们可以对同一个聚类中的网页进行抽样,然后求该抽样结果的平均更新至,从而确定每个聚类的爬行频率。
网页分析算法
搜索引擎的网页分析算法主要分为3类:
1. 基于用户行为的网页分析算法
依据用户对这些网页的访问行为,对这些网页进行评价,比如,依据用户对该网页的访问频率、用户对网页的访问时长、用户的单击率等信息对网页进行综合评价。
2. 基于网络拓扑的网页分析算法
基于网络拓扑的网页分析算法是依靠网页的链接关系、结构关系、已知网页或数据等对网页进行分析的一种算法。基于网络拓扑的网页分析算法,同样可以细分为3种类型:基于网页粒度的分析算法、基于网页块粒度的分析算法、基于网站粒度的分析算法。
PageRank算法是一种比较典型的基于网页粒度的分析算法。他会根据网页之间的链接关系对网页的权重进行计算,并可以依靠这些计算出来的权重,对网页进行排名。HITS算法也是基于网页粒度的分析算法。
基于网页块粒度的分析算法,也是依靠网页间链接关系进行计算的,但计算规则不同。一个网页中通常会包含多个超链接,但一般其指向的外部链接中并不是所有的链接都与网站主题有关,或者说,这些外部链接对该网页的重要程度是不一样的,所以若要基于网页块粒度进行分析,则需要对一个网页中的这些外部链接划分层次,不同层次的外部链接对于该网页来说,其重要程度不同。这种算法的分析效率和准确率,会比传统的算法好一些。
基于网站粒度的分析算法,业与PageRank算法类似,但是,如果采用基于网站粒度进行分析,相应的,会使用SiteRank算法。即此时我们会划分站点的层次和等级,而不再具体地计算站点下的各个网页的等级。所以其相对于基于网页粒度的算法来说,则更加简单高效,精度却没有网页粒度分析算法好。
3. 基于网页内容的网页分析算法
依据网页的数据、文本等网页内容特征,对网页进行相应的评价。
身份识别
正规的爬虫会告知站长其爬虫身份,网站的管理员也可以对其爬虫身份进行识别。
一般的,爬虫在爬取访问网页的时候,会通过HTTP请求中的User Agant字段告知自己的身份信息。爬虫访问网站,首先会根据站点下的Robots.txt文件来确定可爬取的网页范围,Robots协议是需要网络爬虫共同遵守的协议,对于一些禁止的URL地址,网络爬虫则不应该爬取访问。同时,如果爬虫在爬取某一个站点时陷入死循环,造成该站点的服务压力过大,如果有正确的身份设置,那么该站点的站长则可以想办法联系爬虫方,然后停止对应的爬虫程序。
当然,有些爬虫会伪装成其他爬虫或浏览器去爬取网站,以获取额外一些数据,或者有些爬虫,会无视Robots协议的限制而任意爬取。这些行为我们不提倡。
原文地址:https://www.cnblogs.com/dcotorbool/p/8279031.html