1 通讯协议
1.1 端口
- 进行数据通讯的步骤:
(1)找到对方IP
(2)数据要发送到对方指定的应用程序上。为了标识这些应用程序,所以给这些网络应用程序都用数字进行了标识,这个数字就叫端口,这里的端口我们一般称之为 ”逻辑端口“。
(3)定义通讯规则。这个通讯规则我们一般称之为协议。
1.2 通讯协议
- TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议):指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议是国际组织定义的一个通用通信协议 ,常见的有TCP/IPv4和TCP/IPv6。
- 所谓协议就是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
- HTTP协议又叫做超文本传输协议(是一种通信协议),它是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。HTTP的默认端口是80(现在基本省略了)。
2 网络模型
- osi参考模型:
TCP在传输层,IP在网络层。
后期更新了新的参考模型TCP/IP参考模型:
HTTP在应用层。
2.1 HTTPS
(1)https=http+ssl,即在http的基础上加了SSL保护壳,信息的加密过程就是在SSL中完成的。
(2)https是以安全为目标的HTTP通道,简单来说就是HTTP的安全版,即HTTP下加入了SSL层,HTTP的安全基础为SSL。
2.2 SSL
SSL也是一种协议,主要用于web的安全传输协议:
2.3 Http请求与响应
- HTTP通信由两部分组成:客户端请求消息与服务器响应消息
- 步骤:
(1)当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。
(2)当我们在浏览器输入URL:http://www.baidu.com的时候,浏览器发送一个Request请求去获取http://www.baidu.com的html文件,服务器把Response文件对象发送回给浏览器。
(3)浏览器分析Response中的HTML,发现其中引用了很多其他文件,比如Images文件、CSS文件、JS文件。浏览器会自动再次发送Request去获取图片、CSS文件或者JS文件。
(4)当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。
2.4 客户端的Http请求
-
URL只是标识资源的位置,而HTTP是用来提交和获取资源。客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:请求行、请求头部、空行、请求数据 这四个部分组成,下图给出了请求报文的一般格式。
-
一个典型的HTTP请求示例(在Headers的Request Headers里,单击旁边的view sourse就会出现):
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: same-origin
Referer: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Python%20%20%E6%89%8B%E5%8A%A8%E5%9B%9E%E6%94%B6%E5%9E%83%E5%9C%BE&oq=Python%2520%25E6%2594%25B6%25E5%2588%25B0%25E5%259B%259E%25E6%2594%25B6%25E5%259E%2583%25E5%259C%25BE&rsv_pq=f5baabda0010c033&rsv_t=1323wLC5312ORKIcfWo4JroXu16WSW5HqZ183yRWRnjWHaeeseiUUPIDun4&rqlang=cn&rsv_enter=1&rsv_dl=tb&inputT=2315&rsv_sug3=48&rsv_sug2=0&rsv_sug4=2736
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=4049831E3DB8DE890DFFCA6103FF02C1;
解析:
GET是请求方式,HTTP1.1是HTTP标准,Host是主机名称,Connection的值是keep-alive(表示常链接,比如连接的”三次握手“原则,保持常链接的好处是只需要请求一次就可以了),Cache-Control是缓存控制,Upgrade-Insecure-Requests是将http请求升级为https请求,User-Agent是用户代理,Accept是可以传输的类型(包括text、html、xml、image等等),referer是现URL的来源,Accept-Encoding是接收的编码类型,Accept-Language是接收的语言(zh-CN是中文),Cookie是表单。
2.5 请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法:
(1)HTTP 0.9:只有基本的文本GET功能。
(2)HTTP 1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法:GET、POST和HEAD方法。
(3)HTTP 1.1:在1.0基础上进行更新,新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE和CONNECT方法。
(4)HTTP 2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行要独立为:method、:scheme、:host、:path这些键值对。
方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
3 爬虫介绍
3.1 什么是爬虫
简单来说就是一段自动抓取互联网信息的程序,能够代替人去模拟浏览器进行网页操作,从而抓取有价值的信息。
3.2 为什么需要爬虫
为其他程序提供数据源,如搜索引擎(百度、Google等)、数据分析、大数据等等。
3.3 企业获取数据的方式
(1)公司自有的数据
(2)第三方平台购买的数据(百度指数(免费)、数据堂(收费))
(3)爬虫爬取的数据
3.4 Python做爬虫的优势(主要与其他语言比较)
- PHP:对多线程、异步支持不太好
- Java:代码量大,代码笨重
- C/C++:代码量大,难以编写
- Python:支持模块多、代码简介、开发效率高(scrapy框架)
3.5 爬虫的分类
(1)通用网络爬虫,例如:baidu、Google、yahu
(2)聚焦网络爬虫:根据既定的目标有选择的爬取某一特定主题内容。
(3)增量式网络爬虫:指对下载网页采取增量式的更新和只爬行新产生的或者已经发生变化的网页爬虫。
(4)深层网络爬虫:指那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的。只有用户提交一些关键词才能获得的web页面,例如用户登录注册才能访问的页面。
3.6 Python爬虫架构
Python爬虫架构主要由五个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序(爬取的有价值数据)。
(1)调度器:相当于一台电脑的CPU,主要负责调度URL管理器、下载器、解析器之间的协调工作。
(2)URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重复抓取URL和循环抓取URL,实现URL管理器主要用三种方式,通过内存、数据库、缓存数据库来实现。
(3)网页下载器:通过传入一个URL地址来下载网页,将网页转换成一个字符串,网页下载器有urllib2或urllib(Python官方基础模块,在Python3里已经将urllib2和urllib这两个模块合并为一个模块urllib)包括需要登录、代理、和cookie,requests(第三方包)
(4)网页解析器:将一个网页字符串进行解析,可以按照我们的要求来提取出我们有用的信息,也可以根据DOM树的解析方式来解析。网页解析器有正则表达式(直观,将网页转成字符串通过模糊匹配的方式来提取有价值的信息,当文档比较复杂的时候,该方法提取数据的时候就会非常的困难)、html.parser(Python自带的)、beautifulsoup(第三方插件,可以使用Python自带的html.parser进行解析,也可以使用lxml进行解析,相对于其他几种来说要强大一些)、lxml(第三方插件,可以解析 xml 和 HTML),html.parser 和 beautifulsoup 以及 lxml 都是以 DOM 树的方式进行解析的。
(5)应用程序:就是从网页中提取的有用数据组成的一个应用。
4 几个概念
4.1 GET和POST
(1)GET:查询参数都会在URL上显示出来
(2)POST:查询的参数和需要提交的数据是隐藏在Form表单里的,不会在URL地址上显示出来。
4.2 URL组成部分
-
URL:称为统一资源定位符
https://new.qq.com/omn/TWF20200/TWF2020032502924000.html -
解析:
https:协议
new.qq.com :主机名可以将主机理解为一名名为new.qq.com的机器。这台主机在qq.com域名下。
port端口号:43 /new.qq.com在他的后面有个:43可以省略
TWF20200/TWF202032502924000.html为访问资源的路径
#anchor:描点(anchor)用前端在页面做定位的
注意:在浏览器请求一个url,浏览器会对这个url进行编码,即除英文字母、数字和部分标识其他的全部使用%加十六进制码进行编码。(三个%区域为一个文字)
例如:https://tieba.baidu.com/f?ie=utf-8&kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&fr=search
%E6%B5%B7%E8%B4%BC%E7%8E%8B=海贼王
4.3 User-Agent 用户代理
- 作用:记录用户的浏览器、操作系统等,为了让用户更好地获取HTML页面效果
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
(一般在反爬虫的时候用到)
Mozilla Firefox:Gecko内核
4.4 Refer
表名当前这个请求是从哪个URL过来的。一般情况下可以用来做反爬的技术
4.5 状态码(常见)
200:请求成功
301:永久重定向
302:临时重定向
403:服务器拒绝请求
404:请求失败(服务器无法根据客户端的请求找到资源(网页))
500:服务器内部请求
5 抓包工具
- Elements:元素,提取数据和分析数据(有些数据是经过特殊处理的。所以并不是都是准确的)
- Console:控制台(打印信息)
- Sources:信息来源(整个网站加载的文件)(一般是网页源码所在的地方)
- Network:网络工作(信息抓包),能够看到很多的网页请求。在URLs的ALL中,可以看到Headers由General(整体信息)、Response Headers(响应头部信息)、Request Headers(请求头部信息)、Query String Parameters(查询字符串参数)这四部分组成,主要看General那部分的信息,因为请求URL和请求方法都在General里。