鱼C论坛

 找回密码
 立即注册
查看: 2952|回复: 14

[技术交流] 爬虫基础篇-01--HTTP基础原理

[复制链接]
发表于 2019-1-16 05:56:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Stubborn 于 2019-1-16 06:05 编辑

HTTP基础原理


1.1.1        URI和URL
URI是统一标志符                URL是统一定位符
URL是URI的子集,也就是说所有的URL都是URI,但不是每个URI都是5RL。

1.1.2        超文本
超文本,英文名称hypertxt,平常所浏览的网页都是超文本解析而成,其网页源代码是一系列的HTML代码,里面包含一系列的标签。

1.1.3        HTTP和HTTPS
  HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
  HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
  HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

1.1.4        HTTP请求过程
                        客===发送请求===>服
                        户                            务
                        端<===响应======器
                        当我们在web浏览器的地址栏中输入网址回车是,浏览器会向所在的网址服务器发送一个请求,网站服务器接受到这个请求后进行处理和解析,然后返回对应的响应,接着传给浏览器,响应里面包含了页面的源代码等内容,浏览器经过解析,将具体内容呈现在用户眼前。
        “参考链接:https://www.cnblogs.com/xuzekun/p/7527736.html
        当我们在web浏览器的地址栏中输入: www.baidu.com,然后回车,到底发生了什么?
          1.对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址
          2.根据这个IP,找到对应的服务器,发起TCP的三次握手
          3.建立TCP连接后发起HTTP请求
          4.服务器响应HTTP请求,浏览器得到html代码
          5.浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源)
          6.浏览器对页面进行渲染呈现给用户

1.1.15        请求
        即客户端向服务器发送的请求;其主体包括a.请求网址(Reqest URL),b.请求方法(Reuqest Method),c.请求头(Request Header)d.请求正文,或者说请求体(Request Body)

        a.请求网址(Reqest URL):即统一定位符URL,它可以唯一确定我们想请求的资源。

        b.请求方法(Reuqest Method):两种b1.GET        b2.POST
                “参考链接:https://www.cnblogs.com/foodoir/p/5911099.html
                b1.GET:比如我们百度python,这个就是一个GET请求方法,在其链接URL里面可以查询到请求参数信息“python"       
                b2.POST:比如对于一个登陆表单,我们输入账户密码进行登陆,这个就是一个POST请求方法,其数据用表单形式传输,不会体现在URL里面
               
                GET与POST区别:
                1,GET方法用于信息获取,它是安全的(安全:指非修改信息,如数据库方面的信息),而POST方法是用于修改服务器上资源的请求;
                2,GET请求的数据会附在URL之后,而POST方法提交的数据则放置在HTTP报文实体的主体里,所以POST方法的安全性比GET方法要高;
                3,GET方法传输的数据量一般限制在2KB,其原因在于:GET是通过URL提交数据,而URL本身对于数据没有限制,但是不同的浏览器对于URL是有限制的,比如IE浏览器对于URL的限制为2KB,而Chrome,FireFox浏览器理论上对于URL是没有限制的,它真正的限制取决于操作系统本身;
                   POST方法对于数据大小是无限制的,真正影响到数据大小的是服务器处理程序的能力
                4,其余还有6种请求方法,这里不说了,有兴趣可以自己参考上述链接
               
        c.请求头(Request Headers)
                请求头包含了对服务器的请求信息,下面简述一些常用的:
                “参考链接:https://blog.csdn.net/alexshi5/article/details/80379086
                “参考链接:https://baike.baidu.com/item/http请求头/6623287”
                1.Accept:浏览器可接受的MIME类型。请求报头域,用于指定客户端可接受那些类型的信息。
                2.Accept-Encoding:浏览器可接受的字符集,指定客户端可接受的语言类型。
                3.Accept-Language:浏览器能够进行解码的数据编码方式,制动客户端可接受的内容编码       
                4.Host:初始URL中的主机和端口。用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关位置
                5.Cookie:这是最重要的请求头信息之一,也常用复数行书Cookies,这是网站为了辨别用户进行的会话跟踪而储存在用户本地的数据。它的主要功能就是维持当前的访问页面会话。例如你登陆鱼C网站,并记录了登陆状态,下次登陆则不需要再次登陆,服务器就是通过Cookies识别出是我们自己,并查询出当前状态是登陆状态,所以返回结果是登陆之后才         
                  能看到的页面内容。
                6.Referer:表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。此内容用于标识这个请求是从哪个页面发过来的,服务器可以拿到这以信息 并做相应的处理,如做来源统计,防盗链处理等
                7.User-Agent:浏览器的身份标识字符串
                8.Content-Type:请求体的MIME类型或者叫互联网媒体类型(用于POST和PUT请求中),在HTTP协议消息头中,它用来标识具体请求中的媒体类型信息,如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型,更多对应参考一下链接:
                “http://tool.oschina.net/commons"
                因此,请求头是请求的重要组成部分,在写爬虫时,大部分情况下,都需要设定请求头
               
        d.请求正文,或者说请求体(Request Body)
                请求体一般承载的内容是POST请求中的表单数据,对于GET请求,请求体则为空。
                在写爬虫中,若果要构造POST请求,需要使用正确的Content-Type,并了解各种请求库的各个参数设置时使用的时那种Content-Type,不然可能导致POST提交之后无法组成响应

1.1.6        响应或者响应头
        响应,由服务器返回给客户端,分为三部分,a.响应状态码(Request Status Code),b.响应头(Request Headers),c.响应体(Request Body)
       
        a.响应状态码(Request Status Code)
                "参考链接:http://tool.oschina.net/commons?type=5
                响应状态码标识服务器的响应状态,如200请求已成功,请求所希望的响应头或数据体将随此响应返回。跟多参考上述链接
       
        b.响应头(Request Headers)
                “参考链接:https://itbilu.com/other/relate/ ... tp-response-headers"
                响应头包含了服务器对请求的应答信息,下面简述一些常用的:
                Date:发送该消息的日期和时间(以RFC 7231中定义的"HTTP日期"格式来发送),标识响应产生的时间
                Last-Modified:所请求的对象的最后修改日期(按照 RFC7231中定义的“超文本传输协议日期”格式来表示)
                Content-Encoding:指定响应内容的编码,响应资源所使用的编码类型。
                Server:包含服务器的信息,如名称版本号等。服务器的名称
                Content-Type:请求体的MIME类型 (用于POST和PUT请求中),文档类型,指定返回的数据类型是什么。
                Set-Cookie:设置Cookies,响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求
                Expires:指定响应的过期时间,可以使用代理服务器或者浏览器将加载的内容跟新到缓存中,如果再次访问,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。
       
        c.响应体(Request Body)
                最重要的当属响应体的内容了,响应的正文数据都在响应体重,比如请求网页是,他的响应体就是网页的HEML代码,请求一张图片是,他的响应体就是图片的二进制数据。我们做爬虫要解析的内容就是响应体。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
丶Akon + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-31 11:34:48 | 显示全部楼层
好棒棒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-31 16:46:26 | 显示全部楼层
感觉自己萌萌哒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-12 23:54:39 | 显示全部楼层
小白学习爬虫好几天了,不得要领,看了大神的帖子,感觉收货贼多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-2-13 01:03:34 | 显示全部楼层
我刀锋偏冷 发表于 2019-2-12 23:54
小白学习爬虫好几天了,不得要领,看了大神的帖子,感觉收货贼多。

有帮到就好,多看一些,尝试自己去爬一些简单的网站。运行上才是自己的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-2 17:13:54 | 显示全部楼层
捧个人场,很喜欢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-5 16:21:48 | 显示全部楼层
能否将你的头像改了,我上班看个你的帖子。旁边的妹子一脸鄙视的看着我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-5 19:34:46 | 显示全部楼层
南朴 发表于 2019-7-5 16:21
能否将你的头像改了,我上班看个你的帖子。旁边的妹子一脸鄙视的看着我

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-31 07:45:52 | 显示全部楼层
资瓷~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-28 09:58:58 | 显示全部楼层
响应部分应该是response吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-28 10:38:15 | 显示全部楼层
Cache-Control: max-age=0
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Date: Sat, 28 Sep 2019 01:32:17 GMT
Expires: Sat, 28 Sep 2019 01:32:17 GMT
Pragma: No-cache
Server: nginx
set-cookie: ld=Jkllllllll2NlBlXgSHZAqLnmjVNpTjJT1ko$lllllGlllll4llll5@@@@@@@@@@; path=/; expires=Mon, 28 Oct 2019 01:32:17 GMT; domain=.sogou.com
set-cookie: black_passportid=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=.sogou.com
Transfer-Encoding: chunked
UUID: b09b5714-1c0c-4627-ac57-b7805f601b31
Vary: Accept-Encoding
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0

上面从网页上复制的response headers 貌似不大对应的上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-28 16:30:54 | 显示全部楼层
dequantianhe 发表于 2019-9-28 10:38
Cache-Control: max-age=0
Connection: keep-alive
Content-Type: text/html; charset=utf-8

简述一些常用的,“参考链接:https://itbilu.com/other/relate/ ... tp-response-headers"
               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-29 10:27:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-15 17:32:01 | 显示全部楼层
感谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-5 20:33:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 14:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表