说明:本文参照Simon Munzert著&吴今朝译的《基于R语言的自动数据收集》一书,进行个人二次整合而成,如有侵权,告知后删。

同步转载至个人公众号:R语言学习

同步转载至个人知乎专栏:R数据处理

(一)HTTP基础知识

1、HTTP定义

HTTP(HyperText Transfer Protocol)意为超文本协议,本质上是网络客户端(如浏览器)和服务器(对请求进行响应的计算机)之间进行通信的协议,通信内容包括客户端从服务器获取几乎任何类型的资源(如文本、图片、音频、视频),还包括客户端向服务器发送各类型数据。

2、HTTP通信流程

(图为书中内容整理)

通信流程说明:

①用户首先通过鼠标/键盘点击或手动输入目标链接(即URL(Uniform Resource Locators),中文名称:统一资源定位符),向HTTP客户端(如常见的浏览器)传达数据查询需求。

②HTTP客户端收到需求后,将收到的URL信息向DNS服务器(域名系统)询问链接对应的具体IP地址,DNS服务器返回URL对应的IP地址。

③HTTP客户端再拿着IP地址通过TCP协议(传输控制协议,Transmission Control Protocol)和IP协议(Internet Protocol)向HTTP服务器发出数据请求,等待服务器响应。

④HTTP服务器将请求的相关信息返回给HTTP客户端,由客户端返回给客户。

⑤重复上述步骤①~④,直到所有请求执行完毕。

3、HTTP特点

HTTP是一个无状态协议。

这意味着,如果没有其他手段,客户端与服务器之间的每个请求-响应的来回,都会被默认当作首次交互来处理。

4、URL语法

4.1 URL格式

scheme://hostname:port/path?querystring#fragment

可见,一个完整的URL共有6部分构成,但是并不是每个部分都一定要具备。

例:https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1526179817032_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E6%B5%B7%E6%BB%A9

参数解释:

scheme:模式名,这里我们的模式为https

hostname:主机名,表示存放了我们需要的资源的主机名字,示例中的主机名为image.baidu.com,需要使用DNS域名系统将其转换为IP地址。

port:为TCP(传输控制协议)端口,不特别注明的情况下,默认端口为80。

path:为文件在主机中存放的路径,结构同普通文件路径一致。示例的路径为:search/index。

querystring:为查询字符串,通常格式为:name=value,一个URL钟可以有一个或多个查询字符串,多个查询字符串之间需要用&符号进行连接,示例中,我们共有23个查询字符串,均使用&符号连接。

fragment:为分段符,主要用于文档内容进行分段查询与显示,如http://www.w3.org:80/People/Berners-Lee/#Bio,表示直接查询文档中Bio部分,即人物传记部分。

4.2 URL编码规则

URL通过ASCII字符集传输,由于ASCII字符集仅有128个字符,所有不包含在该字符集中的字符(主要是特殊字符)都需要转义,即用标准表示法替代,如果直接输入未经转义的字符,则会报错。

例:在ASCII中,英文冒号的表示方式为“%3a”

更多字符转义方式请参见:http://www.w3school.com.cn/tags/html_ref_urlencode.html

5、HTTP消息-请求模式

请求模式

示例

(图为书中内容整理)

参数解释:

5.1 起始行

顾名思义,起始行是每个HTTP消息的第一行,在起始行中,我们定义了请求方法,即参数[method],定义了请求路径,即参数[path],还申明了客户端(主要是浏览器)能理解的HTTP最高版本,即参数[version]。

结合示例来看,①我们的请求模式为POST,该模式表示“利用正文消息向服务器发送数据/文件,从服务器检索资源”,关键点是向服务器主动发送数据再进行检索,而不是简单的查询。

②示例中请求路径为”/greetings.html ”。③申明了客户端能理解的HTTP最高版本为HTTP/1.1,即HTTP的1.1版。

5.1.1常用的请求方法

常见的HTTP请求方法
GET 从服务器检索资源,且不会在消息正文中发送内容。(网络爬虫最为常用)
POST 利用消息正文向服务器发送数据/文件,如在表单中输入数据,从服务器检索资源。(网络爬虫最为常用)
HEAD 和GET工作原理类似,但服务器响应只有起始行和标头,没有正文,常用于监测检索请求是否成功被服务器接受。
PUT 把请求消息的正文保存在服务器上。
DELETE 从服务器删除一个资源。
TRACE 追踪消息到达服务器沿途的路径,即请求获得发送某条请求消息后,直到到达服务器所经过的代理服务器清单。
OPTIONS 返回支持的HTTP方法清单。
CONNECT 建立一个网络连接。

5.2 标头

请求模式中的标头为客户端和服务器提供了元信息,定义了服务器接到请求后需要采取的行动,主要包括一些首选项和随消息一起发送的内容设置。

我们可以通过设置标头字段实现个性化的请求,标头字段格式:

[header name:]   [header value]

即:标头名称:标头取值

示例请求中,Host:  www.r-datacollection.com,其中Host为标头名称, www.r-datacollection.com为标头取值,即主机名。标头Host是HTTP/1.1版本需要用到的标头字段,在多个主机名重定向到同一个IP地址时,它能帮助服务器决定使用哪个URL。

5.2.1 常见的请求标头

常见请求标头
标头字段名 使用说明 示例 示例说明
Accept 告诉服务器哪种资源类型是客户端愿意当做响应来接收的。可接收的资源类型有多个时,需要用逗号分开,同时用分号后的内容定义其他参数,如返回的优先级别(q)。 Accept:  text/html,image/gif,image/*,*/*;q=0.8

①text/html,image/gif表示客户端接收HTML格式的文本和GIF格式的图片,对这两者没有设置优先级q,默认q=1,即最优先返回。

②其次格式为image/*表示其他格式的图片可以接收,*/*表示其他任何格式的任何内容也可接收,*表示对对象无限制。*/*;q=0.8表示其他任何格式的任何内容接收的优先等级是0.8。

Accept-Encoding 告诉服务器哪种编码/压缩方法客户端可以接受。可接收的编码/压缩方法有多个时,需要用逗号分开,同时用分号后的内容定义其他参数,如返回的优先级别(q)。 Accept-Encoding: gzip,deflate,sdch;q=0.9,identity;q=0.8,*;q=0

①gzip,deflate表示客户端接收gzip和deflate编码方式,默认q=1,即最优先返回。

②sdch;q=0.9,identity;q=0.8表示在没有gzip,deflate编码方式下,也可以接受sdch,优先级为q=0.9,居于第二位。如果sdch也没有,则接受identity,即无编码的内容。

③*;q=0表示不接受任何其他的编码方式,q=0表示不接受。

Authorization 向服务器传递用户名和密码的一种简单方式。用户名首先合并为username:password格式,然后根据Base64进行编码,保证用户名和密码中所涉及字符均在ASCII字符集中,编码结果不进行加密。 Authorization: Basic cm9va211ojEyM0zTm90QVN1Y3VyZVBX Basic申明了服务器端对用户名及密码验证方式为Basic,cm9va211ojEyM0zTm90QVN1Y3VyZVBX为经过编码后的用户名+密码。
Cookie 从服务器发出的请求,用于识别客户端,判断是否与该客户端有过联系。字段内容由一对一对的name=value组成,每对参数用分号分隔。 Cookie: sessionid=2783321;path=/;domain=r-datacollection.com;expires=Mon, 31-Dec-2035 23:00:00 GMT

保留会话id号2783321直到Mon, 31-Dec-2035 23:00:00 ,时间标准采用GMT(世界标准时间)。

sessionid=2783321对域名r-datacollection.com及其所有子目录(通过path=/申明)有效。

From 客户端在向服务器提交请求时,同时提供发送邮件地址的选项,在爬虫时,可以通过设置邮件地址,让网站管理员在必要时联系我们。 Form: cara_xl@163.com 附上在下的邮箱,欢迎大家多多交流。
Host Host是HTTP/1.1版本需要用到的标头字段,在多个主机名重定向到同一个IP地址时,它能帮助服务器决定使用哪个URL。  Host: www.r-datacollection.com:80 www.r-datacollection.com为主机名,80为默认端口。
If-Modified-Since 用于服务器判断客户端请求标头中提供的日期之后,客户端发出的请求中涉及到的资源是否被修改过。如果没有修改,则返回状态码:304 If-Modified-Since: Thu,27 Feb Feb 2014 13:05:34 GMT  
Connection

用于设置客户端与服务器之间连接状态,在不同的HTTP版本中不太一致。

①HTTP/1.0:在客户端获得服务器的响应后,默认会关闭连接,如需保持连接,需要手动设置Connection: Keep-Alive

②HTTP/1.1:在客户端获得服务器的响应后,默认是保持连接,如需关闭连接,需手动设置onnection: Close

   
Proxy-Authorization 用法同Authorization,只是Proxy-Authorization只适用于代理服务器。    
Proxy-Connection 用法同Connection,只是Proxy-Connection只适用于代理服务器。    
Referer 用于告诉服务器,对该资源的请求是从什么位置发出的。    
User-Agent 高诉服务器,提出资源请求的客户端信息,包括操作系统信息,浏览器信息,软件信息等。 R version 3.0.2(2013-09-25),x86_64-w64-mingw32  
Via 提供HTTP消息到达服务器所经过的代理服务器和网关ID。    

6、HTTP消息-响应模式

待更。

(尊重劳动成果,转载请注明出处)

HTTP基础知识(仅介绍涉及R语言爬虫部分)相关推荐

  1. 数据挖掘r语言和python知乎_Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频...

    课程名称 R语言爬虫实战案例分享:网易云课堂.知乎live.今日头条.B站视频 网络数据抓取是数据科学中获取数据中的重要途径,但是一直以来受制于高门槛,都是专业程序员的专属技能.直到R语言和Pytho ...

  2. 第一章c语言基础知识答案,第一章 C语言的基础知识练习题

    第一章 C语言的基础知识练习题 第一章 C语言的基础知识 第一节 对C语言的初步认识 习题 1. 下列叙述中错误的是 B A)任何一个C程序都必须有且仅有一个main函数,C语言总是从main函数开始 ...

  3. java有哪些网校,【有哪些必备的Java的基础知识?想学好这个语言就要了解这些】- 环球网校...

    [摘要]什么是Java企业开发的主流框架,不能一概而论,我希望大家一定要了解有哪些必备的Java的基础知识?想学好这个语言就要了解这些,今天小编就带大家看看有哪些必备的Java的基础知识?想学好这个语 ...

  4. 知识是什么计算机如何表示知识,计算机基础知识教程介绍

    计算机基础知识教程介绍 在生活.工作和学习中,大家或多或少都会用到过祝福语吧,祝福语有助于人与人之间感情的增进和交流.那什么样的祝福语才是好的祝福语呢?以下是小编为大家整理的端午节发给客户的祝福语计算 ...

  5. 哑变量的基本介绍及R语言设置

    哑变量的基本介绍及R语言设置 1. 哑变量的基本介绍[摘自医咖会] 1.1 什么是哑变量? 1.2 什么情况下需要设置哑变量? 1.3 如何设置哑变量的参照组? 1.4 设置哑变量时的注意事项 2. ...

  6. R语言爬虫:当当图书畅销榜(近7日)

    时间:2018-10-9 爬取内容:当当图书畅销榜(近7日):书名.作者.出版社.推荐率.出版时间.价格.折扣.网址 R语言爬虫:当当图书畅销榜(近7日) 通过对其他人爬虫代码的学习,发现有相当一部分 ...

  7. 豆瓣电影R语言爬虫和数据分析.

    主要内容: 1.r语言爬虫 rvest包的使用. 2.r语言字符串处理stringr包的使用. 3.r语言聚合dplyr 包的使用. 4.r语言可视化ggplot 包的使用. 5.r语言画词云图wor ...

  8. 手把手教你使用R语言爬虫在气象网站抓取气象数据并分析绘制热力日历图(1)

    我们做临床研究常见的烦恼为没有好的数据,目前气象网站上有很多关于气象因素和空气质量数据,但是没有系统的整理和格式等问题,我们使用起来非常不方便,而且很费时间,我们可以使用R语言爬虫工具对网站上的数据进 ...

  9. R语言爬虫之rvest包——基础详细介绍+示例

    为什么要学习R语言 都说Python爬虫功能强大,其实遇到动态加载或者登陆网站Python还是很困难,对于大部分的一些普通爬虫,R语言还是很方便.这里介绍R语言rvest包爬虫,主要用到函数:read ...

最新文章

  1. 实际上module(data) 等价于module.forward(data)的原因分析
  2. Python基础day04【字典(介绍、定义与访问、操作数据、常见操作)】
  3. 带你读论文丨异常检测算法及发展趋势分析
  4. ARM裸机环境搭建(U-Boot命令详解)
  5. vs2017安装好后颜色主题、字体、语言包的设置
  6. 2018-05-04 http入门
  7. GO -- 一个经验
  8. 支持向量回归(多核函数)
  9. median函数的使用方法_如何在Google表格中使用MEDIAN函数
  10. 数据结构学习笔记(考研 笔记 完结 西电)
  11. 现代软件工程讲义 4 方法论 - MSF
  12. 诺奖经济大师,数学天才赌徒,和“神秘的股市财富公式”
  13. 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写
  14. 内网渗透(五十)之域控安全和跨域攻击-使用其他工具导出域账号和散列值
  15. 拼多多API分享:抓取拼多多商品详情页数据
  16. [转]Form中控制Tab画布不同标签间切换的方法
  17. Origin Pro 8.5 导出EPS格式稿件图片的设置
  18. 程序员专属浪漫快拿去哄npy吧
  19. C语言 exit 函数 - C语言零基础入门教程
  20. blender 常用修改器

热门文章

  1. PAJ7620u2手势模块
  2. java 级联删除_JPA级联删除
  3. 连个字体反爬都搞不定?你还说你会爬虫?看完这篇就会了。
  4. 0x7fffffff是多少(也就是INT_MAX,首位是 0,其余都是1,f代表1111)
  5. Linux命令之expr详解
  6. SAP副本请求传输教程
  7. phpmywind调用方法大全
  8. Javascript技巧大集合(转自http://www.mscto.com/JavaScript/041043806.html)
  9. php 图片上添加文字
  10. 计算机通识之TCP/IP协议簇(二)