人生苦短,我用 Python
前文传送门:
小白学 Python 爬虫(1):开篇
小白学 Python 爬虫(2):前置准备(一)基本类库的安装
小白学 Python 爬虫(3):前置准备(二)Linux基础入门
小白学 Python 爬虫(4):前置准备(三)Docker基础入门
小白学 Python 爬虫(5):前置准备(四)数据库基础
小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装
这个其实是一个冷知识,各位同学可以猜测一下计算机网络的起源是在哪里。
硅谷?大学?实验室?有点接近了,但还不够准确。
准确的答案是在美苏冷战背景下的美国国防部 。
对的,你没看错,是美国军方 ,最先进的技术总是先应用于军事领域,随着时间的推移才会慢慢的民用化。
1968年,在美国国防部高级计划局的领导下,阿帕网( ARPANET )诞生了。
ARPANET只有四个节点,连接起加利福尼亚州大学洛杉矶分校、加州大学圣巴巴拉分校、斯坦福大学、犹他州大学这四所学校的大型计算机。
阿帕网 ,是全球公认的计算机网络的始祖。
爬虫是一个模拟浏览器进行 HTTP 请求的过程。这就需要我们了解从浏览器输入 URL 到获取到网页中间究竟发生了什么。
先介绍一组概念, URI 和 URL :
没看懂是吧,没事儿,不需要懂,了解一下就好了,我们来举例子。
比如上面这张图片的地址:https://cdn.geekdigging.com/python-spider/uri-url-urn.png ,它是一个 URL 同时也是一个 URI , URL 是 URI 的子集,也就是说每个 URL 都是 URI ,但不是每个 URI 都是 URL ,因为 URI 还包括一个子类叫 URN 。在目前的网络中 URN 的使用非常少,所以几乎所有的 URI 都是 URL ,一般的网页链接我们既可以称为 URL ,也可以称为 URI ,完全看个人喜好。
什么是超文本?
超文本是指可以链接到另一个文档或文本的单词,短语或大块文本。超文本涵盖了文本超链接和图形超链接。
我们在浏览器中访问的网页是由 HTML 编写而成,而 HTML 则被称作为“超文本标记语言”。在 HTML 代码中,包含了一系列的标签,包括图片等的超链接。
我们来看一下一个真实的网站的源代码是怎么样的,在 Chrome 浏览器中,使用 F12 打开开发者工具。
什么是 HTTP ?
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
什么是HTTPS?
《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。
现在越来越多的网站和App都已经向HTTPS方向发展,例如:
HTTP 协议本身是非常简单的。它规定,只能由客户端主动发起请求,服务器接收请求处理后返回响应结果,同时 HTTP 是一种无状态的协议,协议本身不记录客户端的历史请求记录。
为了比较直观的展示这个过程,我们依然打开 Chrome 浏览器,按 F12 开启开发者模式。
看第一行,www.geekdigging.com 那一行:
我们点击一下那一行,可以看到更加详细的内容:
包含了 Header 头信息, Preview (Response Preview) 响应信息预览, Response 响应具体的 HTML 代码, Cookies ,Timing 整个请求周期耗时。
General部分: Request URL 为请求的URL, Request Method 为请求的方法, Status Code 为响应状态码, Remote Address 为远程服务器的地址和端口, Referrer Policy 为Referrer判别策略。
一个HTTP请求报文由请求行(request line)、请求头部(headers)、空行(blank line)和请求数据(request body)4个部分组成。
分为三个部分:请求方法、请求地址URL和HTTP协议版本,它们之间用空格分割。
例如,GET /index.html HTTP/1.1。
HTTP/1.1 定义的请求方法有8种:
常用的有 GET 和 POST 。
在浏览器中直接输入URL并回车,这就发起了一个 GET 请求,请求的参数会直接包含在 URL 里,请求参数和对应的值附加在URL后面,利用一个问号 ?
代表URL的结尾与请求参数的开始,传递参数长度受限制。由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。
允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,而且也不会显示在URL中。
因为请求行所携带的信息量非常有限,以至于客户端还有很多想向服务器要说的事情不得不放在请求首部(Header),请求首部用于给服务器提供一些额外的信息,比如 User-Agent 用来表明客户端的身份,让服务器知道你是来自浏览器的请求还是爬虫,是来自 Chrome 浏览器还是 FireFox。HTTP/1.1 规定了47种首部字段类型。 HTTP 首部字段的格式很像 Python 中的字典类型,由键值对组成,中间用冒号隔开。
下面简要说明一些常用的头信息。
请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。
注意这里提交数据的方式和请求头设置的 Content-Type 息息相关。
服务端接收请求并处理后,返回响应内容给客户端,同样地,响应内容也必须遵循固定的格式浏览器才能正确解析。HTTP 响应也由3部分组成,分别是:响应行、响应首部、响应体,与 HTTP 的请求格式是相对应的。
响应行同样也是3部分组成,由服务端支持的 HTTP 协议版本号、状态码、以及对状态码的简短原因描述组成。
响应状态码表示服务器的响应状态,常见的如200代表服务器正常响应,404代表页面未找到,500代表服务器内部发生错误。
响应头包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等。下面简要说明一些常用的头信息。
最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML代码;请求一张图片时,它的响应体就是图片的二进制数据。
在做爬虫时,我们主要通过响应体得到网页的源代码、JSON数据等,然后从中做相应内容的提取。
https://blog.csdn.net/koflance/article/details/79635240
https://blog.csdn.net/xiaoming100001/article/details/81109617
https://cuiqingcai.com/5465.html
https://blog.csdn.net/ailunlee/article/details/90600174