目录
超文本:英文名称hypertext,简单来说HTML代码就是超文本,而我们看到的网页就是超文本解析而成。
由服务器返回给客户端,分为三部分:响应状态码,响应头,响应体。
响应状态码:表示服务器的响应状态,200表示服务器响应正常,404代表页面未找到。
响应体:响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML代码,如下图。
网页可以分为三大部分:HTML、CSS、JavaScript
爬虫概述:简单来说,爬虫就是获取网页并提取和保存信息的自动化程序。
http基本原理:
Uri:全称为“Uniform Resource Identifier”,即统一资源标识符。
Url:全称为“Universal Resource Locator”,即统一资源定位符。
通俗的来讲url就是uri,而uri包括了url和urn,目前我们常见的都是url。
例如:
“https://www.baidu.com/?tn=02003390_79_hao_pg”
这就是一个url。
一个完整的url包括三部分:
第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包括端口号),简单来说就是网址;
第三部分是主机资源的具体地址,如目录和文件名等,简单来说就是文件地址。
第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略
下面详细地介绍url的3个部分:
第一部分:协议
淘宝的url:https://www.taobao.com/
百度的url:百度一下,你就知道百度一下,你就知道https://www.baidu.com/
可以看到无论是百度还是淘宝他们的url第一部分都是https,意味它们都遵循https协议,目前常见的协议类型有http、https。
HTTP的全称是Hyper Text Transfer Protocol,中文名叫超文本传输协议。
HTTP协议主要作用:
1、客户与服务器建立连接;
2、客户向服务器提出请求;
3、服务器接受请求,并根据请求返回相应的文件作为应答;
4、客户与服务器关闭连接。
HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议,能保证高效而准确的传送超文本文档,简单来说就是可以辅助浏览器与服务器之间的传输数据,当你用浏览器打开一个网页,首先是客户端向服务器发送请求,而服务器返回“响应”(简单来说就是你所看到的网页内容),而协议就是在这个过程中起辅助作用。
第二部分:网址
网址部分大家也经常用到,比如:www.baidu.com, www.taobao.com。这都是网址,当我们在地址栏输入一个网址的时候,协议部分是不用输入的,浏览器会自动补上默认的HTTP协议。
对于www.taobao.com这个网址,如果我们去掉前缀www,即taobao.com,这个部分就叫域名,而域名最右边的com就是顶级域名,常见的比如:.com 表示商业机构,.org表示非盈利性组织,.gov表示政府机构,.edu表示教育及科研机构。用来表示国家顶级域名的比如:.cn表示中国,.us表示美国,.jp表示日本。虽然一个标准的URL地址看起来很复杂,但其实我们在输入URL的时候是只要输入网址或域名就可以了。
至于第三部分就不再赘述。
注意:百度一下,你就知道https://www.baidu.com/?tn=02003390_79_hao_pg
该URL最后一部分?tn=02003390_79_hao_pg
并非资源的具体地址,而是请求的参数。在该URL中的第三部分被省略了。
超文本:英文名称hypertext,简单来说HTML代码就是超文本,而我们看到的网页就是超文本解析而成。
例如:
这些都叫做超文本。
HTTP请求过程
我们在浏览器中输入一个URL,回车之后就能看到网页内容,这个过程实际上是浏览器向该网站所在的服务器发送了一个请求,服务器接受请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器,响应里包含页面源码等内容,浏览器再经过解析,我们便能看到内容。
请求:请求由客户端向服务器发出,分为四部分:请求方法,请求网址,请求头,请求体。
请求方法:
常见的分为两种:GET和POST。
GET:
我们在浏览器中直接输入URL并回车,便发起了一个GET请求,请求参数便包含在内。
例如:百度一下,你就知道https://www.baidu.com/?tn=02003390_79_hao_pg
最后一个‘/’后的内容便是参数。
POST:
大多在表单提交时发起,比如,对于一个需要登录账号密码的网站,即登录表单,你需要输入账号和密码,这时就会发送一个POST请求,而POST与GET区别在于POST请求参数不会出现在URL中,这也就是为什么需要登录的请求都采用POST方式,如果用GET方式,那么用户的账号密码都会暴露在URL中。
请求网址:
百度一下,你就知道https://www.baidu.com/?tn=02003390_79_hao_pg
在这个URL中请求网址就是www.baidu.com
请求头:
用来说明服务器要使用的附加信息,就是服务器所需要的东西。
比较重要的有Cookie,Referer,User-Agent。
Referer:用来标识这个请求是从哪一个页面发过来的,服务器可以拿这一信息用于防盗链处理(一种反爬方式)。
User-Agent:可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息,做爬虫时加上此信息,可以将爬虫伪装成浏览器,以防止反爬。
请求头是请求的重要组成部分,在写爬虫时,通常要设定请求头。
请求体:
请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。
响应
由服务器返回给客户端,分为三部分:响应状态码,响应头,响应体。
响应状态码:表示服务器的响应状态,200表示服务器响应正常,404代表页面未找到。
响应头:包含服务器对请求的应答信息。
响应体:响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML代码,如下图。
请求一张图片时,它的响应体就是图片的二进制数据,我们做爬虫请求网页时,要解析的内容就是响应体。
网页基础
网页可以分为三大部分:HTML、CSS、JavaScript
HTML就是一种用来描述网页的语言,全称叫做Hyper Text Markup Language,即超文本标记语言。
CSS全称叫做Cascading Style Sheets,即层叠样式表,用来让页面变得更美观。
JavaScript是一种脚本语言,我们在网页里看到的动画、交互效果,如轮播图、进度条就是JavaScript在起作用。
爬虫概述:简单来说,爬虫就是获取网页并提取和保存信息的自动化程序。
会话和cookies
首先先介绍HTTP的一个特点叫做无状态,无状态是指服务器不知道客户端是什么状态,每个请求和响应都是独立的,缺少状态记录。
举个简单的例子,比如你登录一个购物平台,你首先输入了你的账号密码,然后由浏览器向服务器发送请求,服务器核对你的账户密码,返回响应,之后你点开一个商品,相当于又发起了一个url请求,但由于HTTP是无状态的,也就是说服务器并不知道是你再次发送的请求,因为请求之间是相互独立的,这时服务器需要再次核对你的身份信息,也就是你的账号密码,因此你需要再次输入账号密码才能打开商品网页。因此便有了会话和cookie的诞生。
会话和cookie用于保持HTTP连接状态,会话在服务端,cookie在客户端。
当你第一次请求服务器时,服务器会返回一个带有cookie的响应,而下次你再访问服务器时,请求中都会包含这个cookie。
比如说,你登陆一个网站,输入你的账号密码,服务器返回一个带有cookie的响应,这个cookie相当于你登录的凭证,而同时在服务器一端也会有与cookie相对应的一个会话,会话储存用户的状态信息,当你在该网站中点开其他网页时,请求中包含了服务器发送给你的cookie,服务器通过cookie找到对应的会话,从而知道你的状态信息,而返回给你想要的响应(也就是网页内容)。
JavaScript渲染页面:有时候我们用requests抓取网页时,得到的源代码和浏览器中看到的不一样,可能是因为网页经过了JS渲染,而我们得到的原始HTML并不能得到真正的网页。所谓JS渲染就是在HTML代码中引入了JS文件,浏览器在识别到HTML中的JS文件会向服务器发送请求,得到了文件后就会执行其中的JS代码,最后就能得到完整的页面。而我们用爬虫爬取的HTML代码并不能加载出JS文件,所以我们就看不到完整的页面内容。
代理
代理实际上就是代理服务器,英文叫做proxy server,就是其他计算机的IP地址,再简单一点就是一个中转站。正常请求一个网站时,我们发送请求给服务器,服务器返回响应给我们。当使用代理时,就是我们发送请求给代理服务器,代理服务器发送给Web服务器,之后返回响应给代理,代理再给我们。当我们用爬虫爬取网页时,可能会因为访问次数过多,被服务器认定为恶意访问,从而被封IP,也就是进了服务器的黑名单,当你想要再次访问时就会失败,而代理的作用就是用来防止服务器封你主机的IP,从而达到隐藏的效果。