python爬虫学习第三章

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

时间: 2024-11-08 05:50:43

python爬虫学习第三章的相关文章

Python爬虫学习:三、爬虫的基本操作流程

本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将数据或信息存入数据库中: 3.数据展示,即在Web端进行显示,并有自己的分析说明. 这次我先介绍第一个功能中所需要实现的基本操作: 爬虫的基本操作:      表示必须步骤           表示可选步骤 导入爬虫所需要的库(如:urllib.urllib2.BeautifulSoup.Scrap

python爬虫学习第四章

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

Python爬虫学习(三)使用Scrapy库

(一)Scrapy库概述 1,安装:pip  install  scrapy失败: 运行D:\Python\Python36\python.exe -m pip install --upgrade pip命令升级pip命令失败: 修改Python36文件的权限:https://www.cnblogs.com/liaojiafa/p/5100550.html 安装:D:\Python\Python36\python.exe -m pip install wheel 安装:D:\Python\Pyt

python爬虫学习第五章正则

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

Python爬虫学习系列教程

Python爬虫学习系列教程 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴趣的童鞋有帮助,如果有机会期待与大家的交流. Python版本:2.7 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库

Python爬虫学习路线,强烈建议收藏这十一条

(一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量.数据结构.语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础:Python 简介 | 菜鸟教程 2.看完基础后,就是做一些小项目巩固基础,比方说:做一个终端计算器,如果实在找不到什么练手项目,可以在 Codecademy - learn to code, interactively, for free 上面进行练习. 如果时间充裕的

Python爬虫学习:四、headers和data的获取

之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.com/ 打开网页,按下F12键,如下图所示: 点击下方标签中的Network,如下: 之后再点击下图所示位置: 找到红色下划线位置所示的标签并点击,在右边的显示内容中可以查看到所需要的headers信息. 一般只需要添加User-Agent这一信息就足够了,headers同样也是字典类型: user

oracle学习 第三章 常用的SQL*PLUS命令 ——02

今天接着昨天的RUN命令继续讲. 3.5 n(设置当前行)命令和A(PPEND)(附加)命令 设想,你输入了例3-10的查询语句 例 3-10 SQL> SELECT ename 2 FROM emp; 例 3-10 结果 看到以上输出时,您发现在SELECT子句中忘了job,sal.这时您又如何修改您的SELECT子句呢?首先您应该使用SQL*PLUS的L(LIST)命令来显示SQL缓冲中的内容. 例 3-11 SQL> L 例 3-11 结果 在例3-11显示的结果中,2后面的"

3. 蛤蟆Python脚本学习笔记三字符串

3. 蛤蟆Python脚本学习笔记三字符串 本篇名言:"平静的湖面只有呆板的倒映,奔腾的激流才有美丽的浪花!幸福不是靠别人来布施,而是要自己去赢取!生命的意义在不断挑战自己,战胜自己!" 这个本来放在昨天的,由于昨晚又太晚了,所以就搁在这里了.赶紧看看吧. 字符串两边都用双引号或者单引号包起来.否则就使用转移符号来转移一下. 输入在一起可以直接拼接. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48112507