:D ...

002.爬虫的基本原理

爬虫可以理解为模拟用户在浏览器或者某个应用上的操作,把操作的过程、实现自动化的程序或脚本。 爬虫是如何实现的呢? 想知道如何实现爬虫,需要先了解在浏览网页的时候都发生了什么事情?知其然,更要知其所以然! 接下来我们通过示例说明实现爬虫的基本原理。 当我们在浏览器中输入网址www.baidu.com后回车发生了什么? 我们来看看这张图: 浏览器与服务器之间的交互过程说明: 浏览器询问DNS服务器获取www.baidu.com的真实IP地址; 返回真实的IP地址给浏览器; 浏览器使用真实IP地址连接www.baidu.com的Web服务器,请求页面数据。 www.baidu.com的Web服务器接收到这个请求后,响应并返回页面文档数据给浏览器。 可以愉快的看到页面啦。 整个过程中的关键信息为: 浏览器与服务器之间的网络通信协议: HTTP协议 浏览器与服务器之间的数据格式: HTML超文本标记格式 HTTP协议 的作用是建立浏览器与Web服务器之间的通信连接通道, 这个通信通道可以传一段文本信息、一个图片或者一个文件都可以。这是数据传输的基础。 HTML超文本标记语言格式 的作用是告诉浏览器应该如何显示收到的文档数据。 注:暂时忽略DNS服务器交互过程,这与爬虫逻辑无关,它只于获取IP地址速度有关。 爬虫原理本质? 如果理解了上面的示例交互过程,那么对于理解爬虫的本质就不难了。 我们的爬虫本质就是在使用HTTP协议 来模拟浏览器行为与Web服务器交互获取HTML页面数据并解析处理的工具。 那么HTTP协议到底是什么呢?HTML超文本标记语言又是怎样描述Web页面的呢? 接下来我们就来一个一个的学习。提升自己的内功就在于点滴的积累。 关于电子书 博客会定期更新爬虫知识!如果你希望获取电子书,可以点击下方链接获取. 电子书阅读地址

2024-05-31 周五 12:51:22 ·  阅读 1 分钟 ·  共 32 字 · 根叔

003.TCP/IP协议族的基本知识

TCP/IP协议族的基本知识 想要学习HTTP协议知识么?怎么讨论TCP/IP协议族了? 别急着学习HTTP协议,如果你没有计算机网络的基本知识功底,还是乖乖的继续往下学习,否则举步维艰描述的就是将来的你。 一名游走于江湖的虫师,怎么能对计算机网络毫无所知?匪夷所思!匪夷所思!啊! 理解协议分层原因 理解计算机网络的第一个知识点是 网络通信模型分层的产生原因 ,我们要从两个故事开始: 故事一:单层结构通信 玛利亚和安两个人是邻居并且都有同样的兴趣爱好,两人语言不通,玛利亚只会说西班牙语而安只会说英语,但是都学习过手语,因此两人可以通过手语面对面的交流想法和观点。 故事二:多层结构通信 由于工作原因,安搬离了另外的城市居住,两人分开前很伤心,但是安送给玛利亚一个翻译机,可以将西班牙语的文字翻译成密码,也可以将密码翻译成西班牙语文字, 而安自己也有一个翻译机,可以将英语文字翻译成密码,也可以将密码翻译成英文文字,两人通过邮局将文字转换成的密码内容传递给对方,再通过翻译机来解密获得自己认识的文字内容, 这样两人又可以互相通信了。 网络协议分层 计算机网络的通信就如同玛利亚与安之间的通信一样,需要跨越很多物理硬件的差异才能与另外一台主机通信。 一种新技术的诞生,通常需要提前制定好实现的标准规范,这样才能保证不同的人实现的结果就有一致性,比如通信模型,这种一致性的好处就是虽然实现方式不同,但是结果是二者可以互相正确通信。 试想一下,我们生活中的电源插座、USB插座或者手机充电接口都是同样的道理。 再比如苹果手机的充电接口和Android的充电接口的不一致,其实是有意为之,带来的结果不兼容!不兼容!不兼容! , 生活中遇见不兼容的问题是多磨让人头疼的事情!看看下面这些USB接口吧。 ![USB_types_2.jpg](../images/USB_types_2.jpg =540x) 为了解决不兼容等一切网络通信问题,达到让所有计算机可以在网络中相互通信, 一个叫做OSI模型的网络通信模型诞生了,这个模型是由国际标准化组织(ISO)召集了大约全世界四分之三的国家代表参与下共同制定的(1984年发布了著名的ISO/IEC 7498标准)。 当时的网络通信参考模型并不是只有一种,在OSI参考模型之前已经有了TCP/IP参考模型(也被称为互联网协议套件或TCP/IP协议族)。 根据维基百科资料,1983年1月1日,互联网前身ARPA网中的通信方式换成了TCPIP模型,并且在现在的互联网中经受住了竞争的考研也就是说TCPIP模型在OSI参考模型指定前就已经被实现并应用了,而且通信模型相对更加容易实现。 最终历史并没有给OSI模型表现的机会,OSI参考模型只是作为学习研究的参考模型。 TCP/IP协议族 翻一翻《计算机网络》书中的这张图,大家可以参考了解下。 OSI模型: 七层协议栈 TCPIP模型: 四层协议栈 教科书模型: 五层协议栈,这是结合了二者模型的学习参考模型。《TCPIP协议栈》教材也是按照五层讲解每层协议的。 TCP/IP协议栈的体系结构(以五层为例) 七层OSI结构为理论学习使用,四层结构为现在计算机实际应用结构,而五层体系结构为教科使用 物理层:直接对接网络物理硬件(例如:网线、光纤等),保证数字信号与电信号在物理硬件上的正确传输,例如低成本的集线器就是工作在物理层,发送数据时都是没有针对性的,而是采用广播方式发送给连接在集线器上的所有主机。 数据链路层:负责相邻节点之间的点对点帧(frame)数据传输,通信的地址为物理网卡的MAC地址,例如家用的交换机就是在这一层工作,它可以根据目标MAC地址有针对的发送到特定端口,而不必广播给所有接入主机。 网络层:负责为分组交换网络上的不同主机提供通信服务,使用的IP协议将IP数据报传输到目标主机上,IP地址的目的是识别主机的网络位置。例如路由器也是工作在这一层的。 传输层: 知道主机位置了,那是什么应用服务之间在通信呢,传输层就是为两个主机之间进程通信提供服务的。服务的标识为端口号,协议主要包含TCP、UDP协议。例如网络硬件负载均衡设备是工作在这一层完成服务的负载均衡的。 应用层: 知道两个主机是哪个进程在通信了还不够,还要知道他们是使用什么协议在通信的,这个协议的实现就是应用层提供的服务,比如 HTTP、FTP、SSH、SMTP 等等协议。 主机之间的网络通信依赖于每一层的协议,这一系列的协议就是按照TCP/IP协议族中协议规范实现的。 下图为实际两台主机之间的网络交互过程描述: 下图为Wireshark工具下分析消息包的层次结构(每层都对应着一种协议格式): 数据通过这种协议栈的层层包裹与解析,可以清晰无误的传达需要传达的数据,不会因为协议在中途解析识别错误而丢失的情况,如果数据因为某种原因无法传达到目的地,也会有对应的协议保证可以及时发现汇报。 RFC文档 每一种协议的实现都是有个标准规范,比如我们都要实现一个FTP协议,那么大家都按同一个标准规范来做才能保证不同人的实现功能保证一致,彼此才能正确通信。 每种协议都对应着一个或多个RFC规范文档,例如: FTP协议规范文档有RFC959、RFC1579、RFC2228等。 HTTP协议规范文档有RFC2616、RFC7540。 想要阅读RFC文档内容可以从这里下载获取:RFC文档下载地址 我们也可以通过查看 RFC索引文档 了解搜索关键词找到与之相关的所有的RFC文档简要信息。

2024-05-31 周五 12:51:22 ·  阅读 1 分钟 ·  共 61 字 · 根叔

004.HTTP协议基础知识

本文介绍的是HTTP协议基础知识, HTML协议即网络通信过程中使用的一种交互协议,需要有一定的网络基础知识才会理解起来更容易,本文也尽力让内容更容易理解。 再了解了TCP/IP协议族分层结构后,我们可以学习HTTP协议了。 HTTP协议属于应用层的协议,协议定义的是客户端与服务端之间通信的数据报文格式,接下来一步一步的学习具体的报文格式及其作用。 成就非凡的侠客,不能只看图练招式,还有内功心法。 HTTP协议格式就是踏入江湖的第一段内功心法。没有它你就很难立足于Web江湖。谨记:耐心! HTTP协议格式 要学习HTTP协议格式,需要分别从下面两个部分了解HTTP协议格式: 请求报文-Request : 客户端/浏览器 发送给 服务端 的报文 应答报文-Response: 服务端 返回给 客户端/浏览器 的报文 我们来通过下面HTTP交互过程来了解报文格式发送过程: 从图中可以看到两种报文发送流程很简单: 第一步:客户端/浏览器 发送给 服务端 一条Request请求报文,告诉服务器,我要浏览页面"www.example.com/index.html" 第二步:服务器 返回给 客户端/浏览器 一条Response应答报文,告诉客户端,好的!接收吧,这是你要的数据。 就这样,一次愉快的请求和应答完成了。 愉快归愉快,可是浏览器向服务器发送了哪些数据呢? 如果连这点都不清楚,那就没办法成为一名合格的虫师啦。 所谓知己知彼,连这个知己都还没搞清楚,何以闯荡江湖… 好啦! 耐心的将两种格式(心法)记住,达到倒背如流的程度吧! Request请求报文格式 Request请求报文就是我们的浏览器发送给服务器的数据格式 Request请求报文格式如下: 格式其实很简单,主要分成三部分: 请求行(RequestLine) : 包含请求方法、请求资源位置和协议版本信息。 头部(Headers): 可能多行,以读到一个空行(一行内容为"\r\n")为结束标识。 实体正文(Body):这里就是实际的请求参数信息或者传输数据,如果不传数据可以没有实体部分。 HTTP协议版本-Version 版本号字段虽然对一名虫师来说不常用,但是对于历史的变迁与未来的方向都可以在版本中映射出他们在江湖中的故事。 HTTP/0.9: 1991年,第一个版本,已过时。 HTTP/1.0: 1996年,第二个版本,替代0.9版本,仍在使用中,仅支持GET、HEAD和POST三种方法。 HTTP/1.1: 1997年,第三个版本,目前使用最为广泛,新增OPTIONS,PUT,DELETE,TRACE和CONNECT五种方法,默认支持长连接(keep-alive),支持分块传输编码。 HTTP/2.0: 2015年5月14日发布RFC7540文档,第四个版本,几乎所有的Web浏览器和主要的Web服务器都通过使用应用程序层协议协商(ALPN)扩展的传输层安全性(TLS)来支持,其中需要TLS 1.2或更高版本(强制性加密支持)。值得一提的是这个协议参考了Google的SPDY协议。增加了对头部基于霍夫曼编码压缩的支持,支持TCP连接的多路复用,极大的降低网络延迟和传输数据量。 维基百科 HTTP/2.0 HTTP/3.0: 2018年被提出,第五个版本,2019年9月Google的Chrome浏览器(79)稳定版本中可以启用。在HTTP/3中,将传输层的TCP协议改为使用基于UDP协议的QUIC(快速UDP网络连接)协议实现。而这种改动设计最初也来自Google。维基百科 HTTP/3.0 虽然版本在提升,但是协议的格式并没有发生改变,改变的仅仅是压缩算法和传输协议。这对于我们来学习分析格式是没有任何影响的。 HTTP协议请求方法-Method HTTP协议请求Web地址-URL 我们常说的网页地址,通常就是指URL地址,而URL地址格式其实是统一资源标识符URI的一种特定形式,例如 “http://www.example.com/index.html" 表示 访问主机"www.example.com"上的index.html文件。 看似简单的URL其实包含了一种标准格式URI的规范: URI = scheme:[//authority]path[?...

2024-05-31 周五 12:51:22 ·  阅读 1 分钟 ·  共 196 字 · 根叔

005.HTML标记语言的基础知识

简单来说,HTML标记语言帮我们提供了网页界面,让网络文本看起来格式更优雅美观。 什么是HTML(超文本标记语言) HTML 是一种使用标签元素来构建Web页面的语言,通过提供了style样式可以美化元素显示效果, 通过Event事件丰富标签元素的行为表现。 每个标签元素都包含一些属性信息,通过属性信息来命名、样式等个性化信息,例如 的 href属性可以提供链接地址信息。<img>标签元素的src属性标记出显示的图片路径信息。 通过标签元素的布局来定义要展示页面的大致布局结构 再通过CSS样式及标签属性丰富页面显示效果,让页面看起来更加美观 再通过JavaScript脚本和标签事件动作的配合,让页面看起来是动态的和相互关联的。 HTML结构 HTML基本结构如下: sh 1 2 3 4 5 6 7 8 9 10 <!DOCTYPE html> <html> <head> <title>Page Title</title> </head> <body> <h1>This is a Heading</h1> <p>This is a paragraph.</p> </body> </html> Doctype声明 <!DOCTYPE html> :这是文档类型声明,HTML文档必须要添加的,这个是HTML5的声明,以前的声明还有如下: HTML 4.01 : sh 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> XHTML 1.1 : sh 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www....

2024-05-31 周五 12:51:22 ·  阅读 2 分钟 ·  共 242 字 · 根叔

006.HTMLDOM基础知识

DOM 是 Document Object Model(文档对象模型)的缩写。通过 HTML DOM, JavaScript 能够访问 HTML 文档中的每个元素。本文可以保存后用到时再来查看。 学习HTML DOM作为基础,以后学习和理解JavaScript会非常容易。 DOM 定义了访问 HTML 和 XML 文档的标准: “W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。” W3C DOM 标准被分为 3 个不同的部分: 核心 DOM - 针对任何结构化文档的标准模型 XML DOM - 针对 XML 文档的标准模型 HTML DOM - 针对 HTML 文档的标准模型 HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。 HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。 节点与节点树概念 在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。 节点与节点之间的关系可以是: 父子关系(上下层)、兄弟关系(同层)。 最顶层的节点叫做根节点(root),他没有父节点和兄弟节点。 节点和节点树说的是对HTML文档的数据结构的抽象存储结构。 而具体的对象 在节点存储结构基础上实现的操作方法封装。 属性Attributes对象 在HTML DOM中, 属性对象是属于一个HTML元素,包含了属性name、value属性和两个状态判断属性isId、specified。...

2024-05-31 周五 12:51:22 ·  阅读 36 分钟 ·  共 7618 字 · 根叔