## 学习爬虫务必从了解请求网页的工作流程和网页的组成原理开始,不然直接去学爬虫操作像是请求库等等,大概率会知其然而不知其所以然(个人体会)

URL和HTTP简介

URL(Uniform Resource Locator):统一资源定位符

下面通过百度贴吧的网址来看一下它们到底是个什么玩意儿:

  https://tieba.baidu.com/index.html

这个网址其实就是所谓的URL,它的作用就是指定“资源”的访问方式。

其中包括访问协议(https)、访问路径(//tieba.baidu.com/)、资源名称(index.html)。

HTTP(Hyper Text Transfer Protocol):超文本传输协议

首先了解一下“超文本”的概念:

  超文本就是利用超链接将各种不同空间的文字信息组成在一起的网状文本(百度百科定义)。它将整个Web网络连接起来。

我们在浏览器看到的网页就是超文本解析而成的,超文本在我们实际应用中体现在哪里呢?

当我们打开浏览器,从一个站点点击链接进入下一个站点,就相当于从超文本的一个空间进入另一个空间,浏览器再将其解析出来,就是我们看到的页面了。

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer):超文本传输安全协议

通俗讲HTTPS就是HTTP的安全版,通过它传输的内容都是经过SSL加密的。

爬虫抓取的页面通常都是http或https协议的。

HTTP请求过程

我们再浏览器输入一个URL,回车之后再浏览器中看到想要的页面内容。

接下来我们分析一下其具体过程:

  1. 浏览器向网站(你输入的URL)所在的服务器发送请求
  2. 网站服务器收到请求后对其进行处理和解析
  3. 网站服务器返回对应的响应
  4. 浏览器解析返回的响应

为了更加直观的说明这个过程,利用Chrome浏览器的开发者模式下的Network监听组件做下演示,它可以显示访问当前网页时发生的所有网络请求和响应。

观察第一个网络请求,index.html

各列含义如下:

  • Status:状态码(此处200代表成功响应)。
  • Type:请求或响应的文档类型(document代表请求的是一个HTML文档)。
  • Initiator:请求源。
  • Size:从服务器下载的文件和请求的资源大小。如果是从缓存中获取的资源,则该列会显示from memory cache。
  • 注:大家自己动手操作过程中“index.html”下面的响应的Size并不是from memory chche。这是因为这次响应是我在打开该页面后刷新得到的,此时请求的资源已经暂存在cache中了,详见下面介绍中响应头的Expires。
  • Time:从发起请求到获取响应的总时间。
  • Waterfall:网络请求的可视化瀑布流。

点击“index.html”可看到更详细的信息:

Remote Address:远程服务器(资源所在的服务器)的地址和端口

Referrer Policy:Referrer判别策略(没有详细了解,初入门并不常见,可以略过)

常见的请求方法有两种:

GET:百度搜索Python,链接为https://www.baidu.com/s?wd=Python,这就是一个GET请求,请求的参数(此处为wd=Python)直接包含到URL里。GET请求提交的数据最多1024kb

POST:大多在提交表单时发起,数据包含在请求体中。比如登陆表单的传输,登录时,需要输入用户名和密码,若使用GET请求,密码就会暴露在URL中。

请求

  • 请求的网址(Request URL)

  • 请求方法(Request Method)

  • 请求头(Request Headers)

    Accept:指定客户端可接受哪些类型的信息

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

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

    Host:指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。

    Cookie(重要):网站为了辨别用户(此处断句,不然可能会绕晕了)进行会话跟踪而存储在用户本地的数据,主要功能是维持当前访问会话。当我们输入用户      名和密码登录某个网站后,本地会有一个服务器返回的Cookie,每次浏览器请求该站点的页面时(我们会发现并不用再次登录),都会在请求头中加上Cookie,服务器便可以识别该Cookie对应的会话。

    User-Agent(重要):使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。用Python做爬虫时,不加此信息会被识别处为爬虫。

    Reffer:标识该请求从哪个页面发出。

    Content-Type(重要):标识具体请求中的媒体类型信息。如text/html代表HTML文档,image/gif代表GIF图片等。

  • 请求体(Request Body)

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

响应

  • 响应状态码(Response Status Code)

    此处只列举几个较为常见的状态码:

    200:服务器正常响应。

    403:禁止访问,服务器拒绝此请求。

    404:服务器找不到请求的网页。

    500:服务器内部发生错误。

  • 响应头(Response Headers)

    Date:响应产生的时间。

    Last-Modified:资源的最后修改时间

    Cotent-Encoding:响应内容的编码方式。

    Server:包含服务器的信息。

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

    Set-Cookie:设置Cookies。告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求。(前面对Cookie没理解的结合此处再回头看一下,应该会好理解一些)

    Expires:响应的过期时间,可以使代理服务器或浏览器将加载的内容更新的缓存中。再次访问即可直接从缓存加载。

  • 响应体(Response Body)

    响应的正文数据都再响应体中,比如请求网页时,它的响应体就算网页的HTML代码,请求一张图片时,它的响应体就是图片的二进制数据。

    我们做爬虫请求网页后,要解析的就是响应体,从而得到网页的源代码、JSON数据等,然后从中做相应内容的提取。

## 结束语:这是我的第一篇技术类博客,同时我也还在Python爬虫学习的道路上摸索,如有不足之处还请见谅,欢迎指正。

    

爬虫基础——HTTP基本原理的更多相关文章

  1. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  2. python 3.x 爬虫基础---Urllib详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...

  3. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  4. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  5. java网络爬虫基础学习(一)

    刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...

  6. python从爬虫基础到爬取网络小说实例

    一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...

  7. 爬虫基础以及 re,BeatifulSoup,requests模块使用

    爬虫基础以及BeatifulSoup模块使用 爬虫的定义:向网站发起请求,获取资源后分析并提取有用数据的程序 爬虫的流程 发送请求 ---> request 获取响应内容 ---> res ...

  8. python爬虫-基础入门-python爬虫突破封锁

    python爬虫-基础入门-python爬虫突破封锁 >> 相关概念 >> request概念:是从客户端向服务器发出请求,包括用户提交的信息及客户端的一些信息.客户端可通过H ...

  9. python爬虫-基础入门-爬取整个网站《3》

    python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python ...

随机推荐

  1. Mysql链接问题

    链接MySQL时报错Client does not support authentication protocol requested by server; consider upgrading My ...

  2. hello.java分析

    如下图源码所示: 该段代码声明了一个entity实体类,该类有一个变量name,对该变量写了对应的get和set方法.类中还有一个空的构造方法hello(). @RequestScoped用于指定一个 ...

  3. javascript之网页跑马灯

    ---恢复内容开始--- <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  4. oracle工具sqluldr2和sqlldr的使用

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法:1. 逐条insert -- 只适用少量数据更新 ALTER TABLE order_items DISAB ...

  5. HTML5播放RTSP,H5播放RTSP,解决方案源码,基于海康网络摄像头

    视频是用的海康网络摄像头(支持RTSP,标准H.264 RTP封装的设备),可以通过 rtsp://admin:1008@192.0.0.64:81/h264/ch1/main/av_stream   ...

  6. 【配置阿里云 I】申请配置阿里云服务器,并部署IIS和开发环境,项目上线经验

    https://blog.csdn.net/vapaad1/article/details/78769520 最近一年在实验室做web后端开发,涉及到一些和服务器搭建及部署上线项目的相关经验,写个帖子 ...

  7. JetBrains GoLand 注册码

    选择license server 输入 http://idea.youbbs.org 完成 要求联网

  8. MFC如何添加背景图片

    1.在xxDlg.h中定义CBrush m_brush 2.在对话框的消息响应中添加一个ON_WM_CTLCOLOR消息响应 3.添加背景图(方法前一篇随笔有讲到) 4.OnCtlColor消息响应函 ...

  9. Unity Graphics(一):选择一个光照系统

    原文链接 Choosing a Lighting Technique https://unity3d.com/learn/tutorials/topics/graphics/choosing-ligh ...

  10. AD服务无法启动

    转自网络资源:http://www.great-one.co.uk/archives/289 版本:win08 : 该方法支持hyper-v 虚拟机 启动报错: A Windows 2008 R2 D ...