爬虫基础知识记录の一

HTTP原理

1.URI和URL

URI,全称Uniform Resource Identifier,统一资源标志符;URL,全称Universal Resource Locator,统一资源定位符。比如现在有一个https://github.com/favicon.ico网址,它既是URI也是URL,表示有favicon.ico这么一个图标资源,我们通过前面的URI/URL来指定了访问的唯一方式,访问协议https、访问路径和资源名称,我们可以通过这个网址在网络中找到指定资源。URL是URI的子集,除此以外,URI还包含了URN,全称为Universal Resource Name即统一资源名,它只命名资源不指定如何定位资源。目前,几乎所有的URI都是URL,因为URN用得少。需要知道的是,URL的格式如下:

protocol ://[username:password@]hostname[:port][/path][;parameters][?query]#fragment

中括号中是非必要部分,我们常用的www.baidu.com就只用了protocol和hostname两部分,其他的都不包含,注意,有时候protocol也被称为scheme,常用的有http、https和ftp;
username、password这里表示进入需要的用户名和密码,有一些URL需要有一些不用,比如python3网络爬虫开发实战中的例子:https://admin:[email protected]这里就表示https://ssr3.scrape.center需要用户名admin和密码admin才能访问;
hostname,可以是域名或ip地址,表示资源所在的主机;
port,端口号,表示前面主机的某个端口,通过这个端口可以访问到某个资源或者得到某种响应;
path,路径,前面说明的hostname主机下某路径就是资源所在处;
parameters,参数,即访问某些资源时的附加信息,这个没怎么仔细分辨过,见仁见智吧;
query,查询,通常代表某种条件,比如说指明解码方式等:ie=utf-8,如果有多个就用&分隔开;
fragment,片段,对资源描述的部分补充,等同书签,常见到的就是锚点,接触过html5的应该知道有个参数id来指定某个位置作为锚点,而访问时网址添加href=#name就可以跳转到该资源的该锚点处。菜鸟教程的例子

2.http和https简单介绍

对于URL,支持协议很多,这里要说的https、http也在其中,后者是Hypertext Transfer Protocol中文名为超文本传输协议的协议,后者是前者的安全版本Hypertext Transfer Protocol over Secure Socket Layer,普遍说法是在http的基础上添加了SSL层安全验证,可以建立一个信息安全的通道来保证信息传输的安全,而且可以通过浏览器地址栏的锁头标志来确认网站的安全信息也可以通过CA机构的安全签章来查询。

3.http的请求

我们平时登录某个网站可以在浏览器的地址栏粘贴某个我们找到的网址或者手动输入,一键enter后,啪的一下就进去了,快的要死(网速好,国内网址的情况下)。其实这算是向网站所在服务器发送的一个请求,而我们进入的网页就是服务器的请求响应。
在这里插入图片描述
如上所示,这是百度的请求列表,当我们刚开始进入的时候,它就发送这些请求,第一个请求就是百度网址的URL,然后我们点进百度请求的条目,它可以展示以下信息:
在这里插入图片描述
上面说明我们请求的URL是www.baidu.com,请求方式是get方法,响应200状态码,找不到应该会响应404,然后下面就是请求头信息和响应头信息,服务器会根据请求头中的状态信息来进行不同的响应,从而得到正确显示的页面。

请求方法

对于请求,比较重要的一个概念是请求方法,我们常见的请求方法有GET和POST请求,我们在百度中搜索,就是一个GET请求,比如我搜索URL得到的链接是这样的(https://www.baidu.com/s?wd=URL&rsv_spt=1&rsv_iqid=0x99541d3100016383&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&oq=WSL%25E7%25BD%2591%25E7%25BB%259C%25E7%25BC%2596%25E7%25A8%258B&rsv_btype=t&inputT=873&rsv_t=499egBufa%2F3R6vAC2x%2Fh8OKsLJ84Cx9C28aV%2B%2FgmS1xyKe0HdJZgqy6l3TlM%2FEuCZ0w5&rsv_pq=d7e0de8000015926&rsv_sug3=41&rsv_sug1=29&rsv_sug7=100&rsv_sug2=0&rsv_sug4=2655)我们关注重要信息,s?wd=URL就包含了重要的query信息,表明了我们搜索的关键字是URL;而当我们登陆某界面时,在点击"登陆"的那时候我们通常会发起一个POST请求,这个请求是在提交表单的时候发起的,数据通常也以表单的形式发送,并不会在URL上有任何表现。
这就是两者的区别,前者只是寻常信息的请求,一般不会涉及敏感信息,而当你需要提交用户名和密码时,使用GET请求就太危险了,所以这时候都是使用的POST请求,另外上传文件时鉴于文件内容较大,所以也会使用POST来进行。除了上面两种请求,还有HEAD、PUT、DELETE、OPTIONS、TRACE等。

请求头中的重要信息

Cookie,也叫Cookies,用于网站辨别用户,进行会话跟踪而存储在用户本地的数据。主要作用是维持当前访问会话。比如登陆后界面。Cookie会标识我们所对应的服务器会话,然后每次浏览器访问该站点页面,都会在请求头加上Cookie发送给服务器,服务器识别身份,确认是否登陆状态,然后返回对应响应。
Refer,用于标识请求的页面,方便服务器处理;
User-Agent,简称UA,特殊的字符串头,使得服务器可以识别客户端所用的操作系统、浏览器信息,对于爬虫来说,添加上这个就可以作为伪服务器,不然会很容易被识别出来。

请求体

对于GET请求来说,请求体为空;而POST请求由于需要提交表单数据,所以需要注意请求头中指定Content-Type信息。比如设置为application/json可以提交json数据,设置成multipart/form-data可以上传文件,设置成application/x-www-form-urlencoded,可以提交用户名和密码信息的表单数据,设置成text/xml可以上传xml数据。

上述内容来源于崔庆才(照片挺帅)的python3网络爬虫开发实战第二版,算是我的一个学习记录,前路漫漫啊。

猜你喜欢

转载自blog.csdn.net/weixin_44948269/article/details/121872129
今日推荐