昨天刚买的崔大大的《Python3网络爬虫开发实战》,今天就到了,开心的读完了爬虫基础这一章,现记录下自己的浅薄理解,如有见解不到位之处,望指出。

1.HTTP的基本原理

  ①我们经常会在浏览器输入www.baidu.com这一网址,这一网址到底是什么呢?其实这就是URL,即(Universal Resource Locator)统一资源定位符。URL明确了百度返回给我们的页面所在的位置。其实URL是另一种叫做URI的子集,URI(Universal Resource Identifier)翻译为统一资源标志符,它指明了有这样一个资源。

  ②什么是超文本?我们知道HTTP的名称为超文本传输协议,到底什么是超文本呢?其实超文本简单来说就是网页的源代码HTML,用一系列标签构成的文本。

  ③HTTP协议和HTTPS,借用崔大书上对于HTTP协议的理解,HTTP协议是用于从网络上传输超文本数据到本地浏览器的协议,它能够保证高效而准确的传送超文本文档。

而HTTPS英文全称为Hyper Text Transfer over Secure Socket Layer,也就是在应用层和传输层中间加了一层安全套接字层(SSL),该安全套接字层为数据的安全传输提供了保障。SSL层通过非对称加密算法先协商出秘钥,在通过对称加密算法对传输的数据使用秘钥加解密,以此来形成数据的加密,具体的加密可以参考这篇文章:https://blog.csdn.net/zhangmiaoping23/article/details/50378855

  ④HTTP的请求过程,当我们在浏览器上输入一个www.baidu.com,回车之后我们便会在浏览器中看到页面,这其中具体发生了什么过程呢?

    1)浏览器向该域名所在DNS服务器发送一个请求,DNS服务器返回给浏览器www.baidu.com所在的服务器的ip地址。

    2)浏览器向www.baidu.com所在服务器的ip地址进行tcp的三次握手。

    3)成功建立连接之后,发送HTTP请求报文。

    4)百度所在服务器接受到请求之后会返回给用户相应的响应。

    5)浏览器接受到响应之后会对响应进行处理个解析,将其显示出来,同时如果没有数据需要传送并且使用的是短连接的话,则进行4次挥手过程断开连接。

  ⑤HTTP的请求报包含四部分的内容,请求的方式(GET/POST),请求的路径,请求头部信息以及请求体。

    1)请求的方式:

      GET和POST请求的区别:GET请求时请求的参数会包含在URL中一起传送给后端,参数可以在URL中看见,而POST请求会将信息放在请求体中发送给后端,POST请求的最大好处是请求的内容是不可见的,试想一下,如果在登录的时候使用GET请求,那么密码将毫无保留的显示在浏览器的URL中。

      其它常见的请求方式:HEAD请求:类似于GET请求,只返回响应的头部信息。

                DELETE请求:请求服务器删除指定的页面。

                CONNECT请求(好像没见过,haha):以服务器做为跳板,让服务器代替客户端访问其它页面。

    2)请求头部信息:请求的头部包含很多重要的字段,我们在使用爬虫的使用需要根据具体的网页来构造请求头。

      ACCEPT:用于指定客户端可以接受哪些类型的信息。

      HOST:用于指定请求的主机IP和端口号。

      COOKIE(提醒自己很重要):网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能就是维持会话,我们经常在访问一个很久没有访问过的网站时会提示Cookie已失效,需要重新登录,其实这就是Cookie在捣鬼,Cookie在爬取那些需要登录才能获取数据的网站时显得格外重要。

      User-Agent(also important):我们可能在刚开始写爬虫时没有任何请求头部信息,这时候服务器收到请求检查请求头部信息中的User-Agent可能会想,这个小伙子一看就是个新手,连UA都不构造就给我发请求,当我真的是傻子嘛!直接给你来一个拒绝服务。所以说,以防万一,还是构造一下User-Agent吧。

      Content-Type:通常也叫互联网媒体类型(MIME),用来表示客户端请求的具体类型信息,比如,请求的是html,就需要Content-Type设置为text/html,请求的是json数据,则把Content-Type改成application/json。注意在登录的时候需要设置Content-Type为application/x-www-form-urlencoded,才会以表单的形式提交。

    3)请求体:一般请求体在使用POST方式时会将数据放在请求体中,而GET请求里请求体为空。

  ⑥响应

    1)常见的响应状态码:

      200:请求成功

      301:请求的网页已经永久移动到新的位置

      302:请求的网页暂时跳转到其他页面

      403:Forbidden,服务器拒绝此请求

      404:Not Found,服务器找不到请求的网页

      405:Bad Method,服务器禁止这种请求方式

      500:服务器内部错误

    2)响应头部信息,这里只列了几个常见的。

      Content-Type:指定返回的数据类型是什么。

      Set-Cookie:设置Cookie,告诉浏览器需要将此内容放在Cookie中,下次请求给带上。

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

    3)响应体:通常是服务器返回给我们的数据,如网页的源代码,json数据等等,如果想要知道到底是什么,可以通过F12调出开发者工具并使用Network工具来查看。

这一篇HTTP基本原理就写到这里吧,下一篇网页基础和爬虫基本原理。先不说了,我要学习。

Python爬虫学习一------HTTP的基本原理的更多相关文章

  1. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  2. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

  3. Python爬虫学习:三、爬虫的基本操作流程

    本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将 ...

  4. Python爬虫学习:四、headers和data的获取

    之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.c ...

  5. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  6. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  7. python爬虫学习视频资料免费送,用起来非常666

    当我们浏览网页的时候,经常会看到像下面这些好看的图片,你是否想把这些图片保存下载下来. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片点击鼠标右键的时候并没有另存为选项,或者你可以通过截图工 ...

  8. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

  9. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

随机推荐

  1. CF1401-C. Mere Array

    CF1401-C. Mere Array 题意: 给出一个长度为\(n\)的数组\(a\),你可以对这个数组进行如下操作:对于数组\(a\)中任意的两个元素\(a_i\).\(a_j\),若\(gcd ...

  2. k8s二进制部署 - 总结

    镜像仓库: 安装软件:docker.docker-compose.harbor.nginx 1.下载cfssl.cfssljson.cfssl-certinfo,增加执行权限并放在PATH环境变量路径 ...

  3. 牛客多校第九场 && ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解

    题意1.1: 求\(\sum_{i=1}^n Fib^m\mod 1e9+9\),\(n\in[1, 1e9], m\in[1, 1e4]\) 思路1.1 我们首先需要知道斐波那契数列的通项是:\(F ...

  4. sqli-libs(7) bool盲注

    首先打开网页后,发现页面显示outfile,  对不起,看不懂,  就直接加 ' 发现报错了 后来,查看源码得知 他是两个括号括起来的 我们就可以构造我们的payload了, 首先查询当前数据库的长度 ...

  5. Inkscape 太慢

    问题: 在画板上图像较多时, 会在粘贴 / 删除 时会陷入长时间的等待 解决: 最佳: Ubuntu上面的比windows上的快上几十倍, 测试比较, 感觉并不是Ubuntu上多用了GPU, 总之, ...

  6. 最新 React 源码学习笔记

    最新 React 源码学习笔记 v17.x.x 框架架构 核心算法 设计模式 编码风格 项目结构 为什么出现 解决了什么问题 有哪些应用场景 refs https://github.com/learn ...

  7. React Transforming Elements All In One

    React Transforming Elements All In One https://reactjs.org/docs/react-api.html#transforming-elements ...

  8. Flutter CLI commands All In One

    Flutter CLI commands All In One Flutter run key commands. r Hot reload. R Hot restart. h Repeat this ...

  9. nasm astrlwr_s函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...

  10. 前端监控SDK开发分享

    目录 前言 收集哪些数据 性能 错误 辅助信息 小结 客户端SDK(探针)相关原理和API Web 微信小程序 编写测试用例 单元测试 流程测试 提供Web环境的方式 Mock Web API的方式 ...