人生苦短,我用Python上一篇传送门:小白学习Python爬虫(一):入门小白学习Python爬虫(二):前期准备(一)基础类安装library小白学习Python爬虫(三):前期准备(二)Linux基础介绍小白学习Python爬虫(四):前期准备(三)Docker基础介绍小白学习Python爬虫(五):前期准备(四)数据库基础知识小白学习Python爬虫(六):前期准备(五)爬虫框架的安装网络的起源其实是一个冷知识,同学们可以猜猜计算机网络的起源在哪里。硅谷?大学?实验室?有点接近,但不太准确。准确的答案是美苏冷战背景下的美国国防部。是的,你没看错,就是美军。最先进的技术总是最先应用在军事领域,随着时间的推移才会慢慢应用到民用领域。1968年,在美国国防高级计划局的领导下,阿帕网(ARPANET)诞生了。ARPANET只有四个节点,连接着加州大学洛杉矶分校、加州大学圣塔芭芭拉分校、斯坦福大学和犹他大学四所学校的大型计算机。Arpanet是世界公认的计算机网络始祖。URI、URL和URN爬取是模拟浏览器发出HTTP请求的过程。这就需要我们了解在浏览器中输入URL到获取到网页之间发生了什么。先介绍一组概念,URI和URL:URI=UniversalResourceIdentifier统一资源标识符,一个紧凑的字符串,用来标识抽象的或物理的资源。URL=UniversalResourceLocator统一资源定位符,定位资源主要访问机制的字符串。一个标准的URL必须包括:协议、主机、端口、路径、参数、锚点。URN=UniversalResourceNameUniversalResourceName,在特定的命名空间中通过唯一的名称或ID来标识一个资源。我不明白,对吧?没关系,你不需要理解它,理解它就可以了。让我们举个例子。比如上图的地址:https://cdn.geekdigging.com/p...,它是一个URL也是一个URI,URL是URI的子集,也就是说每一个URL都是一个URI,但并不是每个URI都是URL,因为URI还包含一个子类,叫做URN。在现在的网络中,很少使用URN,所以几乎所有的URI都是URL。一般网页链接可以叫做URLs或者URIs,看个人喜好。超文本什么是超文本?超文本是指可以链接到另一个文档或文本的单词、短语或大块文本。超文本包括文本超链接和图形超链接。我们在浏览器中访问的网页是用HTML编写的,HTML被称为“超文本标记语言”。在HTML代码中,包含了一系列的标签,包括图片等超链接。让我们来看看一个真实网站的源代码是什么样子的。在Chrome浏览器中,使用F12打开开发者工具。HTTP和HTTPS什么是HTTP?超文本传输??协议是一种基于请求-响应的、无状态的应用层协议,常基于TCP/IP协议进行数据传输,是Internet上使用最广泛的网络协议,所有的WWW文件都必须符合这个标准。设计HTTP的初衷是提供一种发布和接收HTML页面的方式。什么是HTTPS?《图解HTTP》本书中提到HTTPS是SSLshell中的HTTP。HTTPS是一种用于在计算机网络上进行安全通信的传输协议。它通过HTTP进行通信,使用SSL/TLS建立完整的通道,并对数据包进行加密。使用HTTPS的主要目的是为网站服务器提供身份认证,同时保护交换数据的私密性和完整性。PS:TLS是传输层加密协议,前身为SSL协议,Netscape于1995年发布,有时不区分两者。现在越来越多的网站和应用程序正在向HTTPS发展。例如:苹果在2017年1月1日之前强制所有iOS应用使用HTTPS加密,否则该应用将无法上架应用商店;谷歌从2017年2019年1月推出的Chrome56开始,对未经过HTTPS加密的URL链接显示风险警告,即在地址栏显着位置提醒用户“此网页不安全”;腾讯微信小程序官方需求文档要求后台使用HTTPS请求进行网络通信,不满足条件的域名和协议无法请求。HTTP协议HTTP协议本身非常简单。规定只有客户端才能主动发起请求,服务端收到请求并处理后返回响应结果。同时HTTP是无状态协议,协议本身不记录客户端的历史请求记录。为了更直观的展示这个过程,我们还是打开Chrome浏览器,按F12打开开发者模式。查看第一行,即www.geekdigging.com行:名称:请求的名称。status:状态码,200表示正常响应。类型:文单类型,这里我们请求的是一个HTML文档。发起者:请求源。用于标记是哪个对象或进程发起了请求。size:资源大小,这个标识了我们请求的资源的大小。时间:消耗的时间,以毫秒为单位。Watefall:网络请求的视觉瀑布。我们点击那一行可以看到更详细的内容:它包括Header头信息、Preview(响应预览)响应信息预览、Response响应特定的HTML代码、Cookies,以及整个请求周期的Timing耗时。General部分:RequestURL为请求的URL,RequestMethod为请求方法,StatusCode为响应状态码,RemoteAddress为远程服务器的地址和端口,ReferrerPolicy为Referrer识别策略。RequestRequest一个HTTP请求报文由四部分组成:请求行、头部、空行和请求体。请求行分为请求方法、请求地址URL、HTTP协议版本三部分,中间用空格隔开。例如,GET/index.htmlHTTP/1.1。HTTP/1.1定义了8种请求方法:GET:请求页面并返回页面内容。POST:多用于提交表单或上传文件,数据包含在请求体中。PUT:从客户端传输到服务器的数据替换指定文档中的内容。DELETE:请求服务器删除指定页面。PATCH:是PUT方法的补充,用于本地更新已知资源。HEAD:类似于GET请求,只是返回的response中没有具体内容,用于获取header。OPTIONS:允许客户端查看服务器的性能。TRACE:回显服务器收到的请求,主要用于测试或诊断。CONNECT:在HTTP/1.1协议中保留,用于可以更改与管道的连接的代理服务器。常用的有GET和POST。GET直接在浏览器中输入URL回车,即发起GET请求,请求参数会直接包含在URL中,请求参数和对应的值附加在URL后面,还有一个问号?用于表示URL的结束和请求参数的开始,传递的参数长度有限制。因为不同的浏览器对地址的字符限制不同,一般最多只能识别1024个字符,所以如果需要传输的数据量很大,不适合使用GET方式。POST允许客户端向服务器提供更多信息。POST方法将请求参数以名称/值的形式封装在HTTP请求数据中,可以传输大量的数据。这样POST方式对传输数据的大小没有限制,也不会显示在URL中。请求头因为请求行携带的信息量非常有限,所以客户端还有很多话要对服务器说,不得不放在请求头(Header)中。请求头是用来给服务器提供一些额外信息的,比如User-Agent是用来表明客户端的身份,让服务器知道你是从浏览器请求还是爬虫请求,是从Chrome浏览器还是FireFox。HTTP/1.1规定了47种头字段类型。HTTP头字段的格式与Python中的字典类型非常相似,由以冒号分隔的键值对组成。下面简单介绍一些常用的头信息。Accept:请求头字段用于指定客户端可以接受哪些类型的信息。Accept-Language:指定客户端可接受的语言类型。Accept-Encoding:指定客户端可接受的内容编码。Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关所在位置。从HTTP版本1.1开始,请求必须包含此内容。Cookie:Cookies的复数形式也很常用,是网站为了识别用户进行会话跟踪而存储在本地的数据。它的主要功能是维护当前的访问会话。比如我们输入用户名和密码成功登录一个网站后,服务器会使用session来保存登录状态信息。每次我们刷新或者请求站点的其他页面,都会发现都处于登录状态。这是Cookies的功劳。Cookie中有信息可以识别我们相应服务器的会话。浏览器每次请求该站点的页面时,都会在请求头中添加cookies,并发送给服务器。服务器通过cookie识别我们。并且发现当前状态是登录状态,所以返回的结果是登录后才能看到的网页内容。Referer:此内容用于标识请求是从哪个页面发送的。服务端可以得到这些信息并做相应的处理,比如来源统计、防盗链处理等。客户端使用的版本、浏览器和版本。在制作爬虫的时候加上这些信息就可以伪装成浏览器;如果不是,它很可能被识别为爬虫。Content-Type:也称为互联网媒体类型(InternetMediaType)或MIME类型,在HTTP协议消息头中,用于表示特定请求中的媒体类型信息。比如text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型。更多的对应关系可以参考这个对照表:http://tool.oschina.net/commons。请求数据请求体一般在POST请求中携带表单数据,而对于GET请求,请求体为空。注意这里提交数据的方式与请求头中设置的Content-Type密切相关。ResponseResponse服务器接收到请求并处理后,将响应内容返回给客户端。同样,响应内容必须遵循固定的格式,浏览器才能正确解析。HTTP响应也由三部分组成,分别是:响应行、响应头、响应体,分别对应HTTP请求格式。响应行响应行也由3部分组成,由服务器支持的HTTP协议版本号、状态码和状态码原因的简要说明组成。状态码响应状态码表示服务器的响应状态。例如,200表示服务器正常响应,404表示找不到页面,500表示服务器内部出现错误。响应头响应头中包含了服务器对请求的响应信息,如Content-Type、Server、Set-Cookie等,下面简单介绍一些常用的头信息。日期:标识生成响应的时间。Last-Modified:指定资源的最后修改时间。Content-Encoding:指定响应内容的编码。Server:包含服务器信息,如名称、版本号等。Content-Type:文档类型,指定返回的数据类型。比如text/html表示返回一个HTML文档,application/x-javascript表示返回一个JavaScript文件,image/jpeg表示返回一个图片。Set-Cookie:设置Cookies。响应头中的Set-Cookie告诉浏览器,这个内容需要放在Cookies中,下次请求会携带Cookies请求。Expires:指定响应的过期时间,允许代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问,可以直接从缓存中加载,减少服务器负载,缩短加载时间。响应体最重要的是响应体的内容。响应的文本数据在响应正文中。比如请求一个网页,它的响应体就是网页的HTML代码;当请求图片时,它的响应体是图片的二进制数据。在做爬虫的时候,我们主要是通过响应体获取网页的源代码、JSON数据等,然后从中提取相应的内容。参考https://blog.csdn.net/koflanc...https://blog.csdn.net/xiaomin...https://cuiqingcai.com/5465.htmlhttps://blog.csdn.net/ailunle...如果我的文章对你有帮助,请扫描二维码关注作者的公众号:获取最新干货推送:)
