一提起http协议,大家都会想起它是一个应用层协议,那么http协议跟爬虫有什么关系呢?请看下图:

1. http以及https的概念和区别

HTTPS比HTTP更安全,但是性能更低

  • HTTP:超文本传输协议,默认端口号是80(以明文方式传输)

    • 超文本:是指超过文本,不仅限于文本;还包括图片、音频、视频等文件
    • 传输协议:是指使用共用约定的固定格式来传递转换成字符串的超文本内容
  • HTTPS:HTTP + SSL(安全套接字层),即带有安全套接字层的超本文传输协议,默认端口号:443
    • SSL对传输的内容(超文本,也就是请求体或响应体)进行加密
  • 可以打开浏览器访问一个url,右键检查,点击net work,点选一个url,查看http协议的形式

2. 爬虫特别关注的请求头和响应头

2.1 特别关注的请求头字段

http请求的形式如上图所示,爬虫特别关注以下几个请求头字段

  • Content-Type        (响应内容的一个格式)
  • Host (主机和端口号)
  • Connection (链接类型)
  • Upgrade-Insecure-Requests (升级为HTTPS请求)
  • User-Agent (浏览器名称)        (用户代理->提供系统信息和浏览器信息)
  • Referer (页面跳转处)              (即该页面是从哪个页面发起的或者是从哪个页面链接过来的)  (防盗链(图片/视频))
  • Cookie (Cookie)                        (状态保持)
  • Authorization(用于表示HTTP协议中需要认证资源的认证信息,如前边web课程中用于jwt认证)

加粗的请求头为常用请求头,在服务器被用来进行爬虫识别的频率最高,相较于其余的请求头更为重要,但是这里需要注意的是并不意味这其余的不重要,因为有的网站的运维或者开发人员可能剑走偏锋,会使用一些比较不常见的请求头来进行爬虫的甄别

2.2 特别关注的响应头字段

http响应的形式如上图所示,爬虫只关注一个响应头字段

  • Set-Cookie (对方服务器设置cookie到用户浏览器的缓存)

3. 常见的响应状态码

  • 200:成功
  • 302:跳转,新的url在响应的Location头中给出
  • 303:浏览器对于POST的响应进行重定向至新的url
  • 307:浏览器对于GET的响应重定向至新的url
  • 403:资源不可用;服务器理解客户的请求,但拒绝处理它(没有权限)
  • 404:找不到该页面
  • 500:服务器内部错误
  • 503:服务器由于维护或者负载过重未能应答,在响应中可能可能会携带Retry-After响应头;有可能是因为爬虫频繁访问url,使服务器忽视爬虫的请求,最终返回503响应状态码

我们在学习web知识的时候就已经学过了状态码的相关知识,我们知道这是服务器给我的相关反馈,我们在学习的时候就被教育说应该将真实情况反馈给客户端,但是在爬虫中,可能该站点的开发人员或者运维人员为了阻止数据被爬虫轻易获取,可能在状态码上做手脚,也就是说返回的状态码并不一定就是真实情况,比如:服务器已经识别出你是爬虫,但是为了让你疏忽大意,所以照样返回状态码200,但是响应体重并没有数据。

所有的状态码都不可信,一切以是否从抓包得到的响应中获取到数据为准

(抓包得到的源码才是判断依据,elements中的源码是渲染之后的源码,不能作为判断标准)

4. 浏览器的运行过程      (浏览器:发送所有请求,进行渲染;爬虫:只发送请求,不会渲染)

在回顾完http协议后,来了解以下浏览器发送http请求的过程

4.1 http请求的过程

  1. 浏览器在拿到域名对应的ip后,先向地址栏中的url发起请求,并获取响应(此时获取的为静态文件)
  2. 在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应
  3. 浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应
  4. 从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改————这个过程叫做浏览器的渲染

4.2 注意:   (抓包过程:根据发送请求的流程分别在骨骼(骨骼在Network中找document文件)/肌肉/皮肤响应中查找数据,是根据骨骼/肌肉/皮肤这个顺序进行查找)(【骨骼文件:HTML静态文件】【肌肉文件:js/ajax请求】【皮肤:css/font/图片】)

但是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应(该响应的内容可以是html,css,js,图片等)

浏览器渲染出来的页面和爬虫请求的页面很多时候并不一样,是因为爬虫不具备渲染的能力(当然后续会借助其它工具或包来帮助爬虫对响应内容进行渲染)

  • 浏览器最终展示的结果是由多个url地址分别发送的多次请求对应的多次响应共同渲染的结果
  • 所以在爬虫中,需要以发送请求的一个url地址对应的响应为准来进行数据的提取

5. 关于http协议的其它参考阅读

  • https://blog.csdn.net/qq_33301113/article/category/6943422/2
  • https://www.xuebuyuan.com/3252125.html
  • https://baike.baidu.com/item/http/243074?fr=aladdin
  • https://www.jianshu.com/p/cc1fea7810b2
  • https://blog.csdn.net/qq_30553235/article/details/79282113
  • https://segmentfault.com/q/1010000002403462

爬虫基础(二)之http协议复习相关推荐

  1. python爬虫基础(二)~工具包: 下载包requests、urllib和解析包BeautifulSoup(bs4)、lxml.etree.xpath

    目录 1. html下载工具包 1.1 urllib工具包 1.1.1 urllib错误一 1.2 Requests工具包 1.2.1 requests错误一 2. html解析工具包 2.1 Bea ...

  2. 自学Python五 爬虫基础练习之SmartQQ协议

    BAT站在中国互联网的顶端,引导着中国互联网的发展走向...既受到了多数程序员的关注,也在被我们所惦记着... 关于SmartQQ的协议来自HexBlog,根据他的博客我自己也一步一步的去分析,去尝试 ...

  3. python网络爬虫系列(0)——爬虫概述 http协议复习

    一.爬虫概述 知识点: 了解 爬虫的概念 了解 爬虫的作用 了解 爬虫的分类 掌握 爬虫的流程 1. 爬虫的概念 模拟浏览器,发送请求,获取响应 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端 ...

  4. python爬虫基础(一)~爬虫概念和架构

    目录 1. 爬虫 1.1 概念 1.2 分类 2. 爬虫架构 2.1 url管理器 2.2 网页(html)下载(download)器 2.2.1 urllib下载html源码 2.2.2 reque ...

  5. 转 Python爬虫入门二之爬虫基础了解

    静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...

  6. (二)python爬虫基础知识续

    爬虫基础知识二 爬虫应用 数据爬取(微指数) 搜索引擎 app或网页的资源来源 浏览器能做的事情,原则上爬虫都能完成 12306抢票(机器学习可以识别验证码,或者在不需要验证码的合作网站爬取)(微信和 ...

  7. Python网络爬虫第一课----Python网络爬虫基础《http和https协议》

    Python网络爬虫第一课----Python网络爬虫基础<http和https协议> 一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protoc ...

  8. python基础代码库-python爬虫基础教程:requests库(二)代码实例

    get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...

  9. python爬虫requests库_python爬虫基础教程:requests库(二)代码实例

    get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...

  10. python爬虫基础(二)

    文章目录 python爬虫 1.异步爬虫 异步爬虫之多进程and多线程(不建议使用) 异步爬虫之线程池and进程池(适当使用) 单线程+异步协程(推荐) 补充:回调函数 补充:yield 多任务异步协 ...

最新文章

  1. 青春就是一无所有,梦想就是坚持走下去
  2. c#小软件(SaveClassic)开发手记--(1)前言
  3. 说说设计模式~组合模式(Composite)
  4. altium designer 不自动清除回路 清除功能打开失效
  5. Java数据结构与算法:排序算法
  6. 附加数据库失败,版本为655,此服务器支持611及更低版本。不支持降级路径。...
  7. (60)Verilog HDL测试激励:复位激励1
  8. fabric 启动peer_Hyperledger Fabric Peer 常用命令总结
  9. php选择nginx还是apache,浅谈apache和nginx的rewrite的区别
  10. SMTP 发送内嵌图片 邮件
  11. 基于FPGA/数字IC的数字信号处理课程
  12. 逆向破解crackme简要分析
  13. [zz] 高端HIFI发烧音频DAC解码芯片排名
  14. 档案盒正面标签制作_档案盒标签如何制作
  15. 忍痛分享五款小众软件,点赞收藏加关注
  16. 大曝光:淘宝店卖论文,10年卖100多篇SCI获利300万!
  17. 抓取 google 搜索结果
  18. 健身管理系统 -像微信一样简单的智能健身房管理系统
  19. 数据结构二叉树的存储结构
  20. 达内java培优训练营 2106班

热门文章

  1. 赔偿谷歌1.8亿美元!前Uber自动驾驶主管被告到破产
  2. 拿来就能用!如何用 AI 算法提高安全运维效率?
  3. 有答案了!一张图告诉你到底学Python还是Java!你咋看?
  4. 西工大开源拥挤人群数据集生成工具,大幅提升算法精度 | CVPR 2019
  5. AI一分钟 | 小米发布小爱音箱mini,169元;天猫汽车无人贩卖机大楼落地,刷脸可购车试驾
  6. Java jar 如何防止被反编译?代码写的太烂,害怕被人发现
  7. 高并发下秒杀商品,你必须知道的9个细节
  8. 为什么 Java 中“1000==1000”为false,而”100==100“为true?
  9. 深入理解Spring的ImportSelector接口
  10. 网络常见的 9 大命令,非常实用!