沭阳学爬虫01HTTP基本原理

崔大的爬虫课,自己抄书式的笔记,以便复习,也希望能给志同道合的朋友提供小小的帮助

01|掌握HTTP基本原理

URI和URL

URI (Uniform Resource Identifier), 统一资源标志符

URL(Universal Resource Locator), 统一资源定位符

https://github.com/favicon.ico , 它是一个URL,也是一个URI

即有这样的一个图标资源,我们用URL/URI来唯一指定了它的访问方式

其中包括了访问协议HTTPS、访问路径(根目录)、资源名称favicon.ico

通过这样一个链接,我们便可以从互联网上找到这个资源


URL是URI的子集

每个URL都是URI,但不是每个URI都是URL

URI还包括一个子类URN (Universal Resource Name)统一资源名称

URN只命名资源而不指定如何定位资源

  • urn:isbn:0451450523 指定了一本书的ISBN,可以唯一标识这本书

​ 但没有指定到哪里定位这本书


URI、URL、URN关系图
img

在目前的互联网,URN使用非常少,几乎所有的URI都是URL

所以一般网页链接我们可以称之为URL,可以称之为URI,习惯为URL


超文本 Hypertext

我们在浏览器中看到的网页就是超文本解析而成

其网页源代码就是一系列HTML代码,里面包含了一些列的标签

  • img显示图片
  • p指定显示段落

浏览器解析这些标签后,便形成了我们平常看到的网页

网页源代码HTML就可以称作超文本

img

HTTP和HTTPS

淘宝的首页 https://taobao.com/

URL的开头有HTTP或HTTPS

这就是访问资源需要的协议类型

  • ftp、sftp、smb…

在爬虫中,我们抓取的页面通常就是http或https协议的


HTTP: Hyper Text Transfer Protocol

中文名:超文本传输协议

HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议

它能保证高效而准确地传送超文本文档

HTTP由万维网协会(World Wide Web Consortium)

和Internet 工作小组 IETF(Internet Engineering Task Force)

共同合作制定的规范,目前广泛使用的是HTTP1.1版本


HTTPS: Hyper Text Transfer Protocol over Secure Socket Layer

是以安全为目标的HTTP通道

简单讲是HTTP的安全版,即HTTP下加入SSL层,简称HTTPS

HTTPS 安全基础是SSL,因此通过它传输的内容都是经过SSL加密的

它的主要作用可以分为两种:

  • 建立一个信息安全通道,来保证数据传输的安全

  • 确认网站的真实性,凡是使用了HTTPS的网站

    都可以通过点击浏览器地址栏的锁头标志

    来查看网站认证之后的真实信息

    也可以通过CA机构颁发的安全签章来查询


现在越来越多的网站和APP都已经向HTTPS方向发展

  • 苹果公司强制所有iOSApp在2017年1月1日前全部改为使用HTTPS加密,否则App就无法在应用商店上架。
  • 谷歌从2017年1月推出的Chrome56开始,对未进行 HTTPS 加密的网址链接亮出风险提示,即在地址栏的显著位置提醒用户 “此网页不安全”。
  • 腾讯微信小程序的官方需求文档要求后台使用 HTTPS 请求进行网络通信,不满足条件的域名和协议无法请求。

HTTPS已经是大势所趋


HTTP请求过程

我们在浏览器中输入一个URL,回车之后便可在浏览器中观察到页面内容

  • 这个过程是浏览器向网站所在的服务器发送了一个请求
  • 网站服务器接收到这个请求之后进行处理和解析
  • 然后返回对应的响应
  • 接着传回给浏览器

响应里包含了页面的源代码等内容

浏览器再对其进行解析,便将网页呈现了出来

客户端即代表自己的PC或手机浏览器

服务器即要访问的网站所在的服务器



Chrome浏览器的开发者模式下的Network监听组件

可以显示访问当前请求网页时发生的所有网络请求和响应

Network页面下方出现的一个个条目

其中一个条目就代表一次发送请求和接受响应的过程


观察第一个网络请求 www.baidu.com , 其中各列的含义如下

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

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

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

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

  • 第五列Size:从服务器下载的文件和请求的资源大小

    如果是从缓存中取得的资源,则会显示from cache

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

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


点击条目即可看到其更详细的信息

General部分

  • Request URL为请求的URL
  • Request Method 为请求的方法
  • Status Code 为响应状态码
  • Remote Address 为远程服务器的地址和端口
  • Referrer Policy 为Referrer 判别策略

继续往下看

Response Headers 响应头

  • 这就是响应的一部分,其中包含了服务器类型、文档类型、日期等信息
  • 浏览器接收到响应后,进而呈现网页内容

Request Headers 请求头

  • 请求头里带有许多请求信息:浏览器标识、Cookies、Host等信息
  • 这是请求的一部分,服务器会根据请求头内的信息判断请求是否合法
  • 进而做出对应的响应

请求

请求由客户端发出,分为4部分内容

  • 请求方法:Request Method
  • 请求网址: Request URL
  • 请求头: Request Headers
  • 请求体: Request Body
请求方法

常见的请求方法有两种:GET和POST

在浏览器中直接输入URL并回车

这便发起了一个GET请求,请求的参数会直接包含到URL里

  • 在百度中搜索Python,这就是一个GET请求

    链接为https://www.baidu.com/s?wd=Python

    URL中包含了请求的参数信息,这里参数wd表示要搜索的关键字

POST请求大多在表单提交时发起

  • 例如对于一个登录表单,输入用户名和密码后

    点击“登录”按钮,这就会发起一个POST请求

    数据通常以表单的形式传输,而不会体现在URL中

GET和POST请求方法的区别

  • GET请求中的参数包含在URL里面,数据可以在URL中看到

    而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的

    包含在请求体中

  • GET请求提交的数据最多只有1024字节

    而POST请求没有限制

登录时,需要提交用户名和密码,其中包含了敏感信息

使用GET方式请求的话,密码就会暴露在URL里面,造成密码泄露

所以最好用POST方式发送

上传文件时,由于文件内容比较大,也会选用POST方式


https://www.runoob.com/http/http-methods.html

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


请求头

用来说明服务器要使用的附加信息

比较重要的信息有Cookie、Referer、User-Agent等

  • Accept:请求报头域,用于指定客户端可以接受哪些类型的信息

  • Accept-Language:指定客户端可接受的语言类型

  • Accept-Encoding: 指定客户端可接受的内容编码

  • Host:用于指定请求资源的主机IP和端口号

    其内容为请求URL的原始服务器或网关的位置

    从HTTP1.1版本开始,请求必须包含此内容

  • Cookie:也常用复数形式Cookies,是网站为了辨别用户进行会话跟踪而存储在用户本地的数据

    主要功能是维持当前访问会话

    • 例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态

    Cookies里有信息标识了我们所对应的服务器的会话

    每次浏览器在请求该站点的页面时,都会在请求头中加上Cookies并发送给服务器,服务器通过Cookies识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容

  • Referer:此内容用来标识这个请求是从哪个页面发过来的

    服务器可以拿到这一信息并作出相应的处理

    例如来源统计、防盗链处理等

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

  • Content-Type:互联网媒体类型(Internet Media Type)或MIME类型

    在HTTP协议消息头中,它用来标识具体请求的媒体类型信息

    • text/html代表HTML格式
    • image/gif代表GIF图片
    • application/json 代表JSON类型

    更多对应关系可以查看此对照表:https://tool.oschina.net/commons

请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头


请求体

请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空

这是登录GitHub时捕获到的请求和响应

登录之前,我们填写了用户名和密码信息

提交时这些内容就会议表单数据的形式提交给服务器

此时需要注意Request Headers中指定Content-Type 为

application/x-www-form-urlencoded

只有设置成此格式,才会以表单数据的形式提交

我们也可以将Content-Type设置为application/json 来提交JSON数据

或者设置为multipart/from-data来上传文件


Content-Type和POST提交数据方式的关系

在爬虫中,如果要构造POST请求,需要使用正确的Content-Type

并了解各种请求库的各个参数设置时使用的是哪种Content-Type

不然会导致POST提交后无法正常响应


响应

响应服务端返回给客户端,分为3部分:

  • 响应状态码(Response Status Code)
  • 响应头(Response Headers)
  • 响应体(Response Body)
响应状态码

表示服务器的响应状态

  • 200代表服务器正常响应
  • 404代表页面未找到
  • 500代表服务器内部发生错误

在爬虫中,我们可以根据状态码来判断服务器响应状态

  • 如果状态码为200,则证明成功返回数据,再进行进一步的处理

    否则直接忽略

常见的错误代码及错误原因

响应头

响应头包含了服务器对请求的应答信息

如Content-Type、Server、Set-Cookie等

  • Date:标识响应产生的时间
  • Last-Modified: 指定资源的最后修改时间
  • Content - Encoding: 指定响应内容的编码
  • Server: 包含服务器的信息,比如名称、版本号
  • Content-Type:文档类型,指定返回的数据类型是什么
    • text/html 代表返回HTML文档
    • application/x-JavaScript 代表返回JavaScript文件
    • image/jpeg 代表返回图片
  • Set-Cookie:设置Cookies 。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求
  • Expires: 指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间
响应体

最重要的当属响应体的内容了

响应的正文数据都在响应体中

  • 请求网页时,它的响应体就是网页的HTML代码
  • 请求一张图片时,它的响应体就是图片的二进制数据

我们做爬虫请求网页后,要解析的内容就是响应体

在浏览器开发者工具中点击Preview,就可以看到网页的源代码,也就是响应体的内容,它是解析的目标

在做爬虫时,我们主要通过响应体得到网页的源代码、JSON数据等

然后从中做相应内容的提取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值