有什么岁月静好,不过是有人替你负重前行!哪

python快速上手爬虫入门实践

前言:在学习爬虫之前,还需要了解一些基础知识,比如HTML网页基础、HTTP原理、session和cookie的基本原理等。掌握其精髓,在后续的学习中才能达到事半功倍的效果。

本文主要涉及的知识点:

。爬虫的基本结构和工作原理
。HTTP的基本原理
。HTML基础
。session和cookie

爬虫的分类:

*通用网络爬虫:爬取的目标资源在全网中,爬取的目标数据巨大。对爬取性能要求非常高。应用于大型搜索引擎中。
通用网络爬虫主要是由初始URL集合、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块等构成。
爬行策略主要有深度优先爬行策略和广度优先策略。
*聚焦网络爬虫:爬取目标定位在与主题相关的页面中,主要应用在对特定信息的爬取中,主要为某类特定的人群提供服务。
聚焦网络爬虫主要由初始URL、URL队列、页面爬行模块、页面分析模块、页面数据库、链接过滤模块、内容评价模块、链接评价模块等构成。
爬行策略有基于内容评价的爬行策略、基于链接评价的爬行策略、基于增强学习的爬行策略和基于语境图的爬行策略。
*增量式网络爬虫:对已下载的网页采取增量式更新和只爬行新产生的或已经发生变化网页的爬虫。它能够在一定程度上保证爬取的页面是尽可能新的页面。与周期性爬行和刷新页面的网络爬虫相比,增量式网络爬虫只会在需要时爬行新产生和发生更新的页面,并不重新下载没有发生变化的页面,有效减少数据下载量,及时更新以爬行的网页,减少时间和空间上的耗费,但是增加了爬行算法的复杂度。
增量式网络爬虫的体系结构包含爬行模块、排序模块、更新模块、本地页面集、待爬行URL集和本地页面URL集。
增量式网络爬虫有两个目标:保持本地页面集中存储的页面是最新的,保证页面质量。为实现第一个目标,增量式网络爬虫需要通过重新访问网页来更新本地页面集中的页面内容,常用方法;
1.统一更新法:爬虫以相同的频率访问所有的页面,不需要考虑网页的改变频率。
2.个体更新法:根据个体网页的改变频率来重新访问各页面
3.基于分类的更新法:根据网页改变频率将其分成两类,一类更新较快的网页子集和更新较慢的网页子集两类,然后以不同的频率访问这两类网页。
*深层网络爬虫:可以爬取互联网中的深层页面。在互联网中按存在的方式分类,可以分为表层页面和深层页面。所谓的表层页面是指不需要提交表单就可以到达的静态页面;而深层页面则是隐藏在表单后面,不能直接通过静态链接直接获取去,需要提交关键词之后才能获得的页面。在互联网中深层页面比表层页面多得多,故而需要想办法爬取深层的页面,想办法自动填写好对应表单,所以深层网络爬虫最关键的部分为表单填写部分。
深层网络爬虫主要是由URL列表、LVS列表(标签/数值集合,即填充表单数据源)、爬行控制器、解析器、LVS控制器、表单处理器、响应分析器等构成。
深层网络爬虫表单填写有两种类型:
第一种是基于领域知识的表单填写,简单说就是建立一个填写表单的关键词库,在需要填写时,根据语义分析选择对应的关键词进行填写;
第二种是基于网页机构分析的表单填写,简单的说,这种填写方式一般在领域知识有限的情况下使用,这种方式会更具网页机构进行分析,并自动的进行表单的填写。

爬虫的基本结构和工作流程

爬虫的主要目的是将互联网上的页面下载在本地形成一个互联网的镜像备份。
image
网络爬虫的基本结构,流程如下。
1.某地区的新闻列表1-10页的URL
2.将这些URL放入待抓取URL列表中
3.依次从待抓取URL中取出URL进行解析,得到源码,并下载存储到已下载网页源码库中,同时将这些已经抓取过的URL放入以抓取的列表中。
4.分析已抓取的网页源码,从中按照一定需求或规则,提取出新URL放入待抓取URL列表中,这样依次循环,直到待抓取URL列表抓完为止。

爬虫策略

实际开发中,对于待抓取列表URL的设计是很重要的一部分。比如待抓取列表的排列顺序就是一个很重要的问题,因为涉及到先抓取那个页面再抓取哪个页面。决定这些待抓取列表的排序的方法就被称之为抓取策略。
常见的几种抓取策略:
1.深度优先遍历策略:网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。
2.宽度优先遍历策略:首先把某宝首页所有URL提取出来放入待抓取URL列表中,然后再选择其中一个URL进入,继续在进入新的页面提取所有URL,层层递进,依次循环,直到所有URL抓取完毕。
3.大站优先策略:对于待抓取URL列表按所属网站归类,如果那个待抓取页面最多,则优先下载这些链接,往往大型网站包含更多的页面,这个算法效果要略微优于宽度优先遍历策略。
4.最佳优先搜索策略:按照一定网页分析算法,预测候选的URL与目标网页的相似度或与主题相关性,并选取评价最好的一个或者几个URL进行抓取。存在一个问题在抓取过程中可能会忽略很多相关的网页,因为最佳优先策略是一种局部最优搜索算法。因此需要结合具体的应用进行改进,以跳出局部最优点。
关于爬虫策略,在实际应用中根据实际情况选择合适的策略进行爬取。

HTTP的基本原理

为什么在浏览器中输入URL就可以看到网页的内容,它们之间到底发生了什么。了解这些内容,有助于进一步了解爬虫的基本原理。
URI和URL介绍
1.URI是统一资源标识符,URL是统一资源定位符。
2.举例来说“https://www.baidu.com/s?ie=UTF-8&wd=URL”这个地址是百度搜索的一个链接,它是一个URL也是一个URI。用URL/URI来唯一指定它的访问方式,这其中包含了访问协议https、访问主机www.baidu.com和资源路径(/后面的内容)。
通过这个链接我们就可以从互联网上找到这个资源。
URI是一个纯粹的句法结构,用于指定WEB资源的字符串的各个不同部分。
URL是URI的一个特例,它包含定位WEB资源的足够信息。
超文本
浏览器中打开一个百度搜索页面,右击查看源码,看到的就是超文本。
image

HTTP和HTTPS

在上网过程中,访问网址会有HTTP开头或HTTPS开头,这就是访问资源需要的协议类型。又是好还会看到别的开头的URL他们都是协议类型,不清楚就去百度一下就好了。每一个协议对应的服务器默认端口都不一样。
HTTP:现在常用的是HTTP1.1版本,超文本传输协议
HTTPS:超文本传输安全协议,提供了身份验证和加密通信方法。现在的大点的网站都开始用这个了
有的HTTPS的网页打开了还是会出现说【您的链接不是私密链接】,因为这个网站的证书不是CA机构信任的才会出现这样的提示,如果爬取这样的站点就需要设置忽略证书选项,否则会报SSL错
HTTP的请求过程
HTTP的请求过程笼统的来说可以归纳为以下步骤:
客户端浏览器向网站所在的服务器发送一个请求=》网站服务器接收到这个请求后解析和处理,然后返回响应的数据给浏览器=》浏览器中包含网页的源代码等内容,浏览器在对其进行解析,最终将结构呈现给用户。
可以在浏览器中的开发者工具中直观感受一下,里面的参数都可以一一百度仔细看一下。
image
概括性的说:
请求主要包含以下部分:请求方法、请求网址、请求头和请求体。
响应包含响应状态码、响应头和响应体。
网页基础
如果把一个网站比作一本书,那么网页就是这本书的页,网页的组成:
1.HTML超文本标记语言,用来描述网页的一种语言,用来搭建网页的结构
2.CSS层叠样式表,用来美化网页的结构
3.JavaScript脚本语言,用来描述页面的行为,可以响应用户的交互和动画效果

session和cookie

在浏览网站中,经常会遇到需要登陆的情况,有些网页需要登陆之后才可以访问,登录之后在一段时间之内都不需要进行登录验证。还有一些网站在打开浏览器时就自动登录了,而且很长时间不会失效。为什么会出现这种情况呢?其实这里就涉及到session和cookie的相关知识。

session和cookie的基本原理:

session和cookie是用于保持HTTP连接状态的技术,在网页和APP中都会用到,后面写爬虫的时候,也会经常涉及需要携带cookie对应一般的反爬技术。
1.session代表服务器和浏览器的一次会话,session是一种服务器端的机制,session对象用来存储特定的用户会话所需的信息。session由服务器生成,保存在服务器的内存、缓存、硬盘中。
(1)当用户访问一个服务器,如果服务器启用session,服务器就要为该用户创建一个sessionid,在创建session时,服务器首先会检查这个用户发来的请求里面是否包含一个sessionid,如果包含了一个sessionid则就说明该用户已经登录过并给为此用户创建过session了,服务器就会按照这个sessionid把在内存中的session找出来(如果找不到,就可能新创建一个)。
(2)如果客户端请求中不包含session,则为该客户创建一个session并生成与之相关的sessionid。要求这个sessionid不是重复的、不容易找到规律的字符串,这个sessionid将在本次响应中返回到客户端保存,而保存这个session的正是cookie,这样交互过程中浏览器就可以自动的按照规则把这个表示发送给服务器。
2.cookie因为HTTP是无状态的即服务器不知道用户上一次做了什么,严重阻碍了交互式WEB应用程序的实现。为了让服务器知道用户上一次做了什么就需要用到cookie。服务器可以设置或读取cookie中包含的信息,借此维护用户与服务器会话中的状态。
cookie是由服务端生成后发送给客户端的。cookie总是保存在客户端中,按在客户端中存储位置,可以分为内存cookie和硬盘cookie
(1)内存cookie:由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。
(2)硬盘cookie:保存在硬盘中,有一个过期时间,除非用户手动清理或过期,硬盘cookie不会被删除,其存在时间是长期的。所以按存在时间,可以分为非持久cookie和持久cookie。
cookie的基本原理
(1)创建cookie:当用户第一次浏览某个使用 Cokie 的网站时,该网站的服务器就进行如工作。给该用户生成一个唯一的识别码 (Cookie D),创建一个Cookie 对象;默认情况下,它是个会话级别的 Cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果网站希望览器将该 Cookie存储在磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位的时间(其中将最大时效设为0则是命令浏览器删除该 Cookie);然后将 Cookie放入HTTP 响应报头,将Cookie 插人一个Set-Cookie HTTP 请求报头中。最终发送该HTTP 响应报文。
(2)设置存储cookie:设置存储 Cookie:浏览器收到该响应报文之后,根据文头里的 Set-Cookie 特殊的指示生成相应的Cookie,保存在客户端。该 Cookie 中记录着用户当前的信息。
(3)发送Cookie:当用户再次访问该网站时,浏览器首先检查所有存储的 Cookie,如果某个存在该网站的Cookie (即该 Cookie 所声明的作用范围大于等于将要请求的资源),则把该Cookie附在请求资源的 HTTP 请求头上发送给服务器。
(4)读取cookie:服务器接收到用户的HTTP 请求报文之后,从报文头获取到该用户的Cookie。从中找到所需要的内容。
简单来说,Cookie 的基本原理:1.登录2.服务端生成用户ID3.服务端发送用户ID4.客户端保存用户ID5.客户端发送用户ID

Session 是存储在服务器端的,Cookie是存储在客户端的,所以 Session 的安全性要高于 Cookie。再者,我们获取的Session中的信息是通过存放在会话 Cookie 中的 Session ID 取的,因为 Session 是存放在肥务器中的,所以 Session 中的东西不断增加会增加服务器的负担,我们会把一些重要的东两放在Session 中,不太重要的东西放在客户端 Cookie 中,Cookie 分为两大类,会话 Cookie 和持久化Cookie,它们的生命周期和浏览器是一致的,浏览器关了会话 Cookie 也就消失了,而持久化 Cooki会存储在客户端硬盘中。当浏览器关闭时会话 Cookie也就消失了,所以 Session 也就消失了Session在什么情况下丢失,就是在服务器关闭时,或者是 Session 过期时(默认30分钟)

常见误区

在谈论会话机制时,常常会产生这样的误解一一“只要关闭浏览器,会话就消失了”。可以想下银行卡的例子,除非客户主动销卡,否则银行绝对不会轻易销卡删除客户的资料信息。对于会话来说也是一样,除非程序通知服务器删除一个会话,否则服务器会一直保留。例如,程序一般都是在我们做注销的操作时才去删除会话。
当我们关闭浏览器时,浏览器不会主动在关闭之前通知服务器它将会关闭,所以服务器根本就不会知道浏览器已经关闭。之所以会有这种错觉,是因为大部分会话机制都会使用会话 Cookie 来保存会话ID信息,而关闭浏览器之后 Cookie 就消失了,再次连接服务器时,也就无法找到原来的会话了。如果服务器设置的 Cookie 保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的 Cookie 发送给服务器,再次打开浏览器,仍然能够找到原来的会话ID,依旧还是可以保持登录状态的。
而且恰恰是由于关闭浏览器不会导致会话被删除,这就需要服务器为会话设置一个失效时间.当距离客户端上一次使用会话的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把会话删除以节省存储空间。

posted @   小旺first  阅读(353)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
顶部
点击右上角即可分享
微信分享提示