爬虫网络的概述(一)

从现在开始整理爬虫的基本知识,希望能帮助到友友们,也希望能帮我点点赞什么的,给我点动力让我继续创作,加油!!!

HTTP基本原理

URI和URL的定义

URI的全称为Uniform Resource Identifier,即统一资源标志符;URL的全称为Universal Resource Locator,即统一资源定位符。
举个例子:GitHub是GitHub的网站图标链接,这个链接既是一个URL也是一个URI,URL/URI唯一指定这个链接,这里面包含访问协议HTTP,访问路径(/根目录)和资源名称。通过一个连接就可以找到这个资源,这就是URL/URI。那么这两者之间有什么不同呢,这里就要提到另一个概念URN(Universal Resource Name _统一资源名称),简单来说就是URI比URL多了一个URN,多了一个资源名称而已。目前一般的网络连接既可以称为URL也可以叫做URI,下面是它们三个的关系图:
在这里插入图片描述

超文本

超文本(hypertext)顾名思义就是网页的文本,我们看到的网页就是超文本解析出来的,其网页浏览代码都是HTML代码,而HTML代码就可以称作超文本。怎么检查网页源代码呢,右键之后点击检查后,或者直接按f12,然后单击Elements选项卡就可以查看当前网页的源代码,这些源代码都是超文本。

HTTP和HTTPS

在京东首页 http://www.jd.com/中,URL的开头会有http或https,这就是访问资源所需要的协议类型。有时还包括ftp、sftp、smb开头的URL,它们都是协议类型。在爬虫中,爬取的网页一般都是http或https,下面了解一下它们的含义:http https
简单来讲https就是http的安全版,即在http下加了SSL(Secure Socket Layer)层。它的主要作用有两种:建立一个信息安全通道来保证数据传输的安全,第二种是确认网站的真实性。

HTTP请求过程

在浏览器中输入一个URL,回车后便会在浏览器中观察到页面内容。实际上这个过程就是浏览器向服务器发送了一个请求,然后服务器接收到这个请求之后进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应中包含了页面的源代码等内容,浏览器再进行解析,然后便将网页呈现出来了。模型如下:
在这里插入图片描述
此处客户端就是我们的PC或者手机浏览器,服务器即要访问网站所在的服务器。下面为了更直观说明这个过程,请打开Chrome浏览器下的Network监听组件。具体操作为打开Chrome浏览器,输入百度网址:http://www.baidu.com/,右键后点击“检查”进入Network,刷新一下就可以看到在Network页面下出现了一个个条目,其中一个条目就代表一次发送请求和接受响应的过程,观察第一个请求,即www.baidu.co,其中各列的含义:

  1. 第一列 Name: 请求的名称,一般会将 URL 的最后一部分内容当作名称。

  2. 第二列 Status: 响应的状态码,这里显示为200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。

  3. 第三列 Type: 请求的文档类型。这里为 document,代表我们这次请求的是一个 HTML 文档,内容就是一些 HTML 代码。

  4. 第四列 Initiator: 请求源。用来标记请求是由哪个对象或进程发起的。

  5. 第五列 Size: 从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示 from cache。

  6. 第六列 Time: 发起请求到获取响应所用的总时间。

  7. 第七列 Waterfall: 网络请求的可视化瀑布流。

单击Headers条目,即可看到更详细的信息:有General部分,Request URL为请求的URL,Request Method为请求的方法,Status Code 为响应状态码…
再往下看有Response Headers和Request Headers,分别代表响应头和请求头。

请求

请求,客户端向服务器发起请求,其中包括请求方法(Request Method),请求的网址(Request URL),请求头(Request Header),请求体(Request Body)。

- 请求方法

请求方法有两种,第一种是Get方法,第二种是Post方法。在浏览器中输入Python按回车就是一个Get请求,请求的参数会直接包含到URL中,链接为www.baidu.com/s? wd=Python,这里参数wd表示要搜索的关键字。而Post请求方法大多用于表单提交,下面是两者之间的具体区别:

一,区别
1.url可见性

get传参方式是通过地址栏URL传递,是可以直接看到get传递的参数,post传参方式参数URL不可见,get把请求的数据在URL后通过?连接,通过&进行参数分割。psot将从参数存放在HTTP的包体内

2.传输数据大小

get传递数据是通过URL进行传递,对传递的数据长度是受到URL大小的限制,URL最大长度是2048个字符。post没有长度限制

3.后退页面

get后退不会有影响,post后退会重新进行提交

4.缓存

get请求可以被缓存,post不可以被缓存

5.编码方式

get请求只URL编码,post支持多种编码方式

6.历史记录

get请求的记录会留在历史记录中,post请求不会留在历史记录

7 字符类型

get只支持ASCII字符,post没有字符类型限制

二、post相比较get传参方式的优点

1.安全性比get传参方式好:

a.存在于HTTP包中,一般不会直接被查找到

b.post不会被浏览器进行缓存

c.不会留在历史记录中

(并不代表post一定安全,因为在HTTP下都是明文传输,post仍然可以被查找到,增加安全性最好使用https协议)

2.post没有字符和编码的限制,能发送的数据类型更多

3.post传送数据没有大小限制,比get可以发送的更多的数据

post的缺点:速度比get传输慢,get的效率更高

三、为什么get的效率比post高

1.post在接收返回来的数据会先将请求头发送给服务器确认,然后才真正的发送数据,(相当于第一次先向服务器打个招呼,第二次才将数据真正的发过来,get则是直接发送数据。专业的说法是,get产生一个TCP数据包,post产生两个TCP。数据包但并不是所有的浏览器post都会请求两次,火狐浏览器就会请求一次)总结起来就是请求的过程比get更多

2.get会将数据进行缓存

除了这两种常见的请求方法还有几种不常见的请求方法:
1.get方式用于请求数据,获取url位置的资源,获取网页,参数写在url后面,安全性相对post较差
2.post方式用于提交数据,修改数据,参数写在请求主体里,post请求不会被缓存
3.head方式主要用于请求头部资源,与get请求相似,区别是响应中只有头部,没有主体
4.option请求方式 主要有两个用途,一个是获取服务器支持的http请求方式都有哪一些,另一个作用是测试服务器的性能
5.put请求方式:向服务器发送请求,如果URI不存在,则要求服务器根据请求创建资源,如果存在,
服务器就接受请求内容,并修改URI资源的原始版本,我将会用到这个方式来创建一个写有一句话的txt文件
6.move请求方式,不在标准的八种请求方式中,可以通过option测试服务器是否支持,可以将一个指定文件移动到新路径,在路径末尾指定文件名还可以对文件进行重命名。(请求服务器将一个页面转移至另一个网络地址)tt

  • 请求网址

请求的网址,即统一资源定位符URL,它可以唯一确定想请求的资源。

  • 请求头

请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie、Referrer、User-Agent等。

  • Cookie:也常用复数形式Cookies,这里是网站为了辨别用户会话的数据而存储的用户数据。它的主要功能就是维护当前的访问会话。简单来说登录了教务处系统,又进入了查取成绩页面,而没有重新登陆密码,这就是Cookie的功劳,Cookie中有信息标识了所对应的服务器会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookie并将其发送给服务器,服务器通过Cookie识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的页面。

  • Referrer:客户端通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)

  • User-Agent:简称UA,它是一个特殊的字符串头,它可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在爬虫的时候加上这个信息,可以伪装成浏览器,如果不加很可能被识别出爬虫。

  • 其他:ttt

  • 请求体

请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。
登陆之前,填写了用户名和密码信息,提交时这些内容就会以表单数据的形式提交给服务器,此时需要注意的是Request Headers中指定Content-Type为application/x-www-form-urlencoded。只有设置Content Type为application/x-www-form-urlencoded,才会以表单数据的形式提交。
下表是Content Type和POST提交数据方式的关系。

Content Type提交数据的方式
application/x-www-form-urlencoded单表数据
multiparty /form-data表单文件上传
application/json序列化JSON数据
text/xmlXLM数据

在爬虫中,如果要构造POST请求,需要使用正确的 Content-Type,并了解各种请求库的各个参数在设置时使用的是哪种Content-Type,不然可能导致POST提交后无法正确响应。

响应

响应,由服务器返回客户端,可以分为三个部分:响应状态码(Response Status Code)、响应头(Response Header)和响应体(Response Body)

  1. 响应状态码

响应状态码表示服务器的响应状态,如200就代表服务器响应正常,404代表页面未找到,500代表服务器内部发生错误。在爬虫中,可以根据响应状态码来判断服务器响应状态,如状态码为200,则证明成功返回数据,再进行进一步的处理,否则直接忽略。详细错误代码及错误原因请点击错误代码

  1. 响应头

响应头包含了服务器对请求的应答信息,如Content-type,Server,Set-Cookie等。下面简要说一下一些头信息。

  • Data:标识响应产生的时间。

  • Last-Modified:指定资源的最后修改时间。

  • Content-Encoding:指定响应内容的编码。

  • Server:包含服务器的信息,比如名称、版本号等。

  • Content-Type:文档类型,指定返回的数据类型是什么,如text/html代表返回HTML文档等等。

  • Set-Cookie:设置Cookie。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookie中,下次请求携带Cookie请求。。

    3.响应体
    最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML代码;
    在浏览器开发者工具中单击Preview,就可以看到网页的源代码,也就是响应体的内容,它是解析的目标。在做爬虫时,主要通过响应体得到网页的源代码、JSON数据等,然后从中做出相应内容的提取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值