这是博客的第二篇Python爬虫教程,主要内容为:URI与URL,超文本是什么,http和https的区别在哪里?http的请求过程是怎样的的?一个请求分为几个部分,响应回来的是什么,有什么用,分为哪几个部分,前端和后端有什么区别,网页组成部分,每个html节点的关系,css的选择器,以及我们今天的重中之重:爬虫是什么原理,怎么工作,效果是怎样的?如果爬取次数过多会怎样,有什么解决方案?


正文
这里就开始一一解答这些问题了,首先,URI中文名教统一资源标示符,URL中文名为统一资源定位符,URL是URI的子集,URL都是URL但是URI不是全部都是URL,他还有一个儿子叫做URN,但是在目前出场次数很少,所以这里也不多解释了。网址既可以成为URL也可以成为URI,一般都是称为URL。

超文本
英文名叫hypertext,每个网页都是超文本通过浏览器的解析而成的,源代码是一系列的html标记,如<p>,等等都是标记,浏览器把这些标签解析之后就变成了我们所看到的网页。例如在Chrome浏览器里面按一下F12就会出现开发者工具,第一个选项就是看网页源代码的,这些源代码就是超文本。

http和https的区别
在网站URL的开头会有http或者https这些就是访问资源需要的协议,有时还会有file,ftp,ssh等等开头的,那些都是访问的时候需要回复的协议,在爬虫中我们抓取的都是使用http或者https协议的。
http中文名教超文本传输协议,用于网络传输超文本的,能高效准确传送超文本文档。http由万维网协会和internet工作小组IETF共同合作制定的规范,目前广泛使用 http1.1的版本。
https是http的加强安全版,在http的基础上加了SSL层,简称https。https的安全基础为ssl,通过它传输的内容都是经过ssl加密的,主要作用可以分为两种:建立信道保证传输的安全,确认网站真实性,凡是使用了https的网站都可以在URL前面看到一个锁,表示网站是安全的,也可以通过CA机构颁发的安全章来查询。
有部分的自签证书是不被CA机构信任和承认的,所以还是会提示是不安全的连接。要爬取这一类的网站要忽略证书是否安全,不然会提示SSL链接错误。

http请求
http请求是由客户端对服务器进行一个访问,服务器再返回响应的资源。我们可以在文章页按一下F12,再F5刷新一下,就能看到在Network有几项请求,上面有几个标记,name:请求名称,一般是请求URL,Status:响应状态码,Type:文档类型 ,Initiator:请求源,标记请求是哪个对象发起的,Size:资源大小,如从缓存中获取则为from cache,Time:发起请求到响应的总时间,Waterfall:网络请求的可视化瀑布流。
点击请求,就可以更详细的信息。

请求
请求方法
一般分为两种,GET和POST,在浏览器中直接输入URL回车,这就发起了GET请求,百度的时候会出现wd表示搜寻关键字。POST请求大多在表单提交时发出,比如在填写登录的时候,发送的账号密码时不会在URL中出现就是POST请求了。

  1. GET请求参数包含在URL中,数据可以在URL看到,但是POST请求驳回通过URL来传送这些数据,用表单进行传送,体现在请求中。
  2. GET请求提交数据最多只有1024字节,但是POST没有限制。

一般登录时都会选择POST请求而不是GET请求,因为GET请求会暴露在URL中,容易造成泄露。
除了平常遇到的请求方式,还有:

  • GET:请求页面并返回页面内容
  • HEAD:类似GET,不过返回响应中没有具体内容,用于获取报头
  • POST:大多用于提交表单或上传文件,数据包含在请求体中
  • PUT:从客户端向服务器传送的数据取代指定文档中的内容
  • DELETE:请求服务器删除指定的页面
  • CONNECT:把服务器当做跳板,让服务器替代客户端访问其他网页
  • OPTIONS:允许客户端查看服务器的性能
  • TRACE:回显服务器受到的请求,主要用于测试或诊断
    请求网址就是URL,可以确定我们请求的是什么资源。

请求头:一个非常重要的,在HTTP包中的元素,其中有几个重要/常用的头

  • Accept 请求报头域,指定客户端可以接受什么类型的资源
  • Accept-Language 请求语言(例如中文英文啥的)
  • Accept-Encoding 指定客户端可以接收什么编码的资源
  • Host 用于指定请求资源的IP和端口号,HTTP1.1版本后一定要包含此内容
  • Cookie 这个用途非常广泛,用于辨别用户进行会话追踪而储存在本地的数据。
  • Referer 标识从哪里请求该资源,可以用于防护和统计(例如统计友链收益等等)
  • User-Agent 这一个也非常重要,用于标识浏览器的版本,用户系统,版本信息等,也可以用于识别爬虫和防爬虫,一般做爬虫都要注意这一项。
  • Content-Type 在消息头中标识具体请求的资源类型,如text/html表示传送HTML文件等等,类型众多不在此一一列举
    在编写爬虫中也要注意这一些的请求头,以加强爬虫能力

请求体则为POST请求中的表单数据,GET请求中为空(没用),可以在Content-Type中看到具体的值,有以下四种

  • application/x-www-form-urlencoded 提交方式:表单数据
  • miltipart/form-data 提交方式:表单文件上传
  • application/json 提交方式:JSON数据
  • text/xml 提交方式:XML数据

响应
响应是服务器发回给客户端的回复,分为三部分:状态码,响应头和响应体
1,响应状态码:用来表示服务器的响应状态,主要由以下几种:

  • 1xx:接收请求正在处理
  • 2xx:请求正常,已处理完毕
  • 3xx:需重定向/附加操作完成请求
  • 4xx:客户端出错,服务器无法处理请求
  • 5xx:服务器出错,服务器处理请求出错
    2,响应头:用来表示服务器对请求的答复,有以下几项
  • Date:响应产生时间
  • Last-Modified:指定资源最后修改时间
  • Content-Encoding:指定响应资源编码
  • Server:包含服务器信息,比如名称等
  • Content-Type:文档类型,指定响应资源类型
  • Set-Cookie:返回要保存的Cookie
  • Expires:指定响应过期时间,可以使或浏览器把内容放到缓存里面
    3,响应体:响应中的关键部分,也就是响应的内容,正文都在响应体中

网页基础
网页可以分为三大部分:HTML,JS,CSS。html负责大体布局,js负责进行操作,css负责渲染网页使之更美观。
HTML:是描述网页的一种标记语言(划重点:标记语言,有很多的教程会将其讲成编程语言但是从定义上不是),全名叫Hyper Text Markup Language,也就是超文标记语言,网页中包含的问题,按钮,图片等元素基础架构都是HTML。不同的标签有着不同的作用(<p></p>,,......),在Chrome浏览器中按一下F12开发者工具之后在Elements选项卡中可以看到网页源代码
CSS:全称Cascading Style Sheets,中文名教层叠样式表,是,唯一的网页页面排版样式标准,在HTML中使用link导入写好的CSS文件,优化页面布局
JavaScript,简称为JS,脚本语言,只使用HTML和CSS提供静态信息缺乏交互性,所以JavaScript就是补充这一点的不足,在网页中不调用后端就能实现交互和动画效果,但是坏处是在本地进行运算,有篡改的可能性。JavaScript通常单独用文件形式存放,后缀名js,在HTML中使用script标签进行导入,如下所示:
<script src="文件地址/名"></script>

网页结构:HTML框架为树状结构,,被称为节点树,通过DOM,一些节点可以通过JS访问,所有HTML节点元素均可以被修改,创建,删除
节点树的节点有层级关系,常用父,子,兄弟关系描述,父节点有子节点,同级的子节点被称为兄弟节点,最高层节点被称为根(root),除根节点外,每个节点都有父节点,同时也可以有不限量的子节点或者兄弟节点

CSS选择器:网页由节点组成,CSS是根据不同节点设置不同的规则,使用选择器进行定位节点,在CSS中主要有三种选择器,分别是:id选择器,class选择器,标签名选择器,特点为:id选择器钱会有#号,class选择器前会有.号,此外也有一些其他的语法规则,但是因为数量巨多,在这里也不列举了。

接下来就到了我们的重中之重:爬虫的原理
爬虫就是在互联网这一张大网上爬行的蜘蛛,节点为网页,蜘蛛爬到这就相当于访问了这个网页,获取了具体的信息,可以吧节点的连线比作网站间的链接关系,通过刚获取的信息进一步深入去探寻信息,网站的数据也就这样慢慢被蜘蛛所获取了

爬虫就是获取网页的信息的自动化程序,步骤一般分为以下几部:1,获取网页,也就是直接的模仿正常访客访问网站,获取诸如HTML等等的资源;2,提取信息,在刚获取到的资源中提取我们所需要的的信息;3,保存数据,这个的方式也非常多种多样,如直接输出,或存储到TXT等文件中,高阶的操作也可以保存至数据库,如MySQL,Redis等中,也可以作为服务的内容,如直接生成API接口显示

自动化爬虫就是要代替人类手动在网页中查找信息这个繁琐的操作,直接使用可以重复利用的程序,可以使工作更高效,便捷
而爬虫能抓取的数据也非常的多种多样,如爬HTML的,爬JSON的......

但是在爬虫中经常会遇到一个问题:很多网页能显示的东西,到爬虫手上就不行了是怎么回事?这个是因为没有js的操作,导致许多应该显示的内容在这里都没有显示,解决的方案是使用支持ajax的库解决(如selenium,直接调用真实浏览器进行操作)或者直接分析Ajax的接口(类型XHR)

会话和cookie的区别和使用场景
在一些网站中,我们会遇到要登录的情况,而且登陆之后不限制访问次数或有放宽限制访问次数,但是一段时间后就需要重新登录,还有一些网站在登录后会有一长段时间不需要再次登录,是为什么呢?这就要说到Session和Cookie了
在静态的网页中往往会出现灵活性差的情况,例如在网址中通过GET请求传入一个字符串叫name并在网页中显示它,这在静态网页中是做不到的,因此动态网页可以灵活适应这一种的情况,可以解析URL变化并解析,显示不同的效果。有代表性的动态网站语言有:ASP,JSP,PHP,Python等等,功能也远比静态网站要强大。
而且动态网站还可以实现用户登录和注册的功能,在登入后会拿到一种票据,就像在景区买票后会给你一张用于出入的门票,在web中是会话和Cookie的协作结果

HTTP无状态
http无状态指http协议对处理是没有记忆能力,也就说服务器不知道客户端的状态,我们发送请求后,服务器进行解析并返回响应的返回值,服务器完成这一过程而且完全独立,不会记录前后状态的变化,缺少记录,则说明如果后续还需要处理前面的信息,就需要重发数据包,导致需要重复进行这一无必要的运作,会非常的浪费资源和时间,这种对于需要登录的页面说是灾难性的。
这个时候会话和Cookie出现了李辉华在服务器用于保存用户的信息,而cookie在客户端,在下一次的访问中会自动附带它进行发送和识别,服务器也得以见顶用户,判断用户状态
会话与Cookie对的区别
1,会话是短时性的,就像打电话,拨打到挂断这一个过程就可以被认为是一段会话。在web中,会话用于储存特定用户会话所需的属性等,当用户在网页间跳转时,储存的会话对象中的变量不会丢失,在整个绘画中一直存在,如果该访客是一位新的可以,将会自动新建会话,在会话过期或放弃后,服务器将会终止会话以节省资源。
2,Cookie指某些网站为了辨别用户身份,进行会话追踪而储存在客户端上的数据。在初次请求时,服务器会返回一个Set-Cookie字段给客户端,而客户端会保存下这一Cookie,在往后的访问中发送该Cookie并辨认用户的状态。但是如果传入的Cookie无效或会话过期,将不能继续访问,收到错误的响应。在ChromeF12工具中的Application选项卡中,在左侧的Storage项中会有一个叫Cookie 的下拉按钮,按一下会显示许多的Cookie条目,都是以往访问网站保存下来的Cookie。

常见误区:在关闭浏览器后会话就消失了,其实这个是错误的,除非程序主动通知服务器删除会话,否则服务器会一直留存着这一会话。在关闭浏览器时,浏览器时不会才主动在关闭前通知服务器将会关闭,服务器不知道客户端已经关闭。服务器为了减轻负担,会设置一个关闭会话的时间限制,如果过长时间没有使用,服务器就可以认为客户端已经停止了活动,才会删除会话。

代理
在爬虫工作中会经常出现注入403等等错误,这一种一般是因为IP被认为访问过多被封禁,过了服务器的一个限定访问数量,将会拒绝对单一爬虫进行服务。在这一种情况下就需要用到代理了也就是转发到别的服务器上再进行访问,在服务器看来就像一个新来的访客,不会认为是爬虫,达到了伪装的效果。
代理原理
代理就是在本地对网站进行访问,会先将请求发送至代理服务器,再由代理服务器转发到目标服务器,目标服务器发送了响应到代理服务器,代理服务器再回传至客户端。
代理有啥用呢?
代理有以下几个好处:

  • 突破访问限制,访问一些特定的网站(请不要使用代理技术进行违反中国法律的违法行为,本站在此声明,概不负责)
  • 访问一些单位的资源,例如高校的VPN系统连接学校内网,查询共享资源。
  • 提升访问速度,因为代理服务器都会设置一个较大的缓冲区,储存用户的访问资源。当用户再次访问的时候可以直接返回缓存,达到提升速度的效果。
  • 隐藏真实的IP,以免被封,也避免受到攻击

代理分类:根据不同的协议进行区分,有不同的功能,例如:FTP代理,HTTP代理,SSL/TLS代理,RTSP代理,Telnet代理,POP3/SMTP代理,SOCKS代理;根据匿名度分类:高匿代理:直接转发原包,不做修改,普匿代理:会改动一下,例如加入一些表示使用了代理的头,透明代理:不但改包,还会告诉服务器客户端真实IP,主要用于提速呵呵过滤提高安全性能外,基本没什么用处,间谍代理:创建用于记录用户传输数据的代理,通常用于抓包分析

代理的设置:免费代理,在网上公开,付费代理,质量比免费的好,ADSL拨号,老方案,打一枪换一个IP,稳定性高,速度不敢保证

这就是第二篇教程的全部内容了!请继续关注我的下一篇文章!

最后修改:2021 年 07 月 06 日 05 : 56 PM