我们想要进行数据通讯分几步?
举例:同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?
也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
所谓协议就是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
国际组织定义了通用的通信协议 TCP/IP协议。
IP协议:规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。(有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。)
TCP协议:在数据包中加入端口信息的协议,以确定数据包是通向哪一个应用程序,以及数据包是否发送及确收。
HTTP协议:又叫做超文本传输协议(是⼀种通信协议),一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。 HTTP 它的端口是 80。
互联网分成若干层。即互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。
用户接触到的,只是最上面的一层(应用层),根本没有感觉到下面的层。要理解互联网,必须从最下层开始,自下而上理解每一层的功能。
实体层:把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。如:光缆、电缆、双绞线、无线电波等方式。
链接层:必须规定电信号的解读方式,在"实体层"的上方,确定了0和1的分组方式。包括:以太网协议、MAC地址、广播。
有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了
网络层:MAC地址不能够区分数据包是否在同一个子网,而且广播方式也只能发送在发送者所在的子网络。因而引入网络层,它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做"网络地址",简称"网址"。(IP协议、IP数据包、IP地址、ARP协议)
传输层:建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。(TCP协议)
应用层: 应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。
"应用层"的作用,就是规定应用程序的数据格式。
SSL也是⼀个协议主要⽤于web的安全传输协议
本文通讯协议、网络模型部分参考阮一峰老师的博客:互联网协议入门(一) - 阮一峰的网络日志
阮一峰老师的这篇博客真的通俗易懂,强推阅读。
代替⼈去模拟浏览器进行网页操作
为其他程序提供数据源 如搜索引擎(百度、Google等)、数据分析、大数据等等
1.公司自有的数据
2.第三方平台购买的数据 (百度指数、数据堂)
3.爬虫爬取的数据
PHP : 对多线程、异步⽀持不太好
Java : 代码量大,代码笨重
C/C++ : 代码量大,难以编写
Python : 支持模块多、代码简洁、开发效率高 (scrapy框架)
通用网络爬虫(General Purpose Web Crawler)
爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。 例如 baidu google yahu
聚焦网络爬虫(Focused Web Crawler):根据既定的目标有选择的抓取某⼀特定主题内容
增量式网络爬虫(Incremental Web Crawler): 指对下载网页采取增量式的更新和只爬行新产生的或者已经发生变化的网络爬虫
深层网络爬虫(Deep Web Crawler): 指那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交⼀些关键词才能获得的web页面 例如 用户登录注册才能访问的页面
更多爬虫分类介绍详见:爬虫大概分类
GET : 查询参数都会在URL上显示出来(例如:百度查询字段)
POST : 查询参数和需要提交数据是隐藏在Form表单里,不会在URL地址上显示出来(例如:有道翻译)
(1)URL: 统⼀资源定位符
https://new.qq.com/omn/TWF20200/TWF2020032502924000.html
(2)https: 协议
(3)new.qq.com: 主机名可以将主机理解为⼀台名叫news.qq.com 的机器。这台主机在 qq.com 域名下
(4)port 端口号: 80 /new.qq.com 在他的后面有个 :80 可以省略
(5)TWF20200/TWF2020032502924000.html 访问资源的路径
(6)#anchor: 锚点⽤前端在做页面定位的
如:百度百科里面的目录索引,网易云音乐上的分栏
(7)注意 : 在浏览器请求⼀个url,浏览器会对这个url进行⼀个编码。(除英文字母、数字和部分标识其他的全部使用% 加 十六进制码进行编码)
作用:记录用户的浏览器、操作系统等,为了让用户更好的获取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
(有些网站为了反爬,因而为了爬取,需要添加User-Agent)
Mozilla Firefox:(Gecko内核)火狐浏览器内核
表明当前这个请求是从哪个url过来的。⼀般情况下可以用来做反爬的技术
比如:拉勾网查职务,应该从首页查取(refer为首页)。如果发现不是从首页开始,可能会识别为爬虫
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
HTTP状态码的英文为HTTP Status Code。状态码一般有:
200 : 请求成功
301 : 永久重定向:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 : 临时重定向:临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI。
403 : 服务器拒绝请求
404 : 请求失败(服务器⽆法根据客户端的请求找到资源(⽹⻚))
500 : 服务器内部请求