前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能教程
一、爬虫的概念和作用
1.1 概念:
网络爬虫也叫网络蜘蛛,特指一类自动批量下载网络资源的程序,这是一个比较口语化的定义。更加专业和全面对的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序.
1.2 作用
1.2.1 数据采集
大数据时代来临,数据就是核心,数据就是生产力,越来越多的企业开始注重收集用户数据;而爬虫技术是收集数据的—种重要手段。
1.2.2 搜索引擎
百度,谷歌等搜索引擎都是基于爬虫技术。
1.2.3 模拟操作
爬虫也被广泛用于模拟用户操作,测试机器人,灌水机器人等。
二、爬虫原理
伪装成服务端与客户端交互
2.1 网络架构(客户端和服务端)
(1) c/s 即client server客户端服务端
(2) b/s即 browser server浏览器服务端
(3) m/s 即 mobile server移动端服务端
互联网的飞速发展是商业经济推动的。目前几乎所有的商业应用都是基于互联网的,它们一般采用c/s架构b/s架构或者m/s架构。
2.2 HTTP协议(数据交互)
2.2.1 原因
计算机之间的交流与人之间的交流类似,人之间要说汉语,遵循一定的语法结构,普通话,声音洪亮等要求,这些要求,约数,或规则.也可以叫做协议;这种协议保障了交流可能,能够互相理解对方传达的具体信息;计算机之间也是需要-种规则,保障之间信息的有效交流,这就是HTTP协议。
2.2.⒉概念和特点
(1)HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(Www: World WideWeb )服务器传输超文本到本地浏览器的传送协议。
(2)目前互连网上90%的网络传输都是基于http协议。
(3)HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等) ;ps:使用TCP通信协议的重要的原因是基于其面向连接的特点;
2.2.3 HTTP协议的使用
(1)HTTP请求流程
一次http请求的基本流程是,有客户端向服务端发起─次请求(request),而服务器在接收到以后返回给客户端一个响应(response)。所以一次完整的http请求包含请求和响应两部分。
(2)URL(网址)
发送http请求时,通过URL对网络资源进行定位。
URL (Uniform Resource Locator),中文叫统一资源定位符。是用来标识某一处资源的地址。也即是我们常说的网址。以下面这个URL为例,介绍下普通URL的各部分组成:
示例网址: https://ssr1.scrape.center/
输入网址,我们的数据就显示出来了
(3)打开调试面板
方式一:F12/ctrl+shift+l
方式二:
获取到网站数据
查看请求url和响应
选择会话
2.3 HTTP请求格式(请求行,请求头,空行,请求体)
客户端发送一个HTTP请求到服务器的请求消息包括以下部分:请求行,请求头,空行和请求数据。
(1)请求行
根据http标准,http请求可以使用多种请求方法。
1.0定义了三种请求方法:GET,POST和HEAD方法
1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
注意:
(1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405 (Method Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not
lmplemented)。
(2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法
常用方法:
GET
1.主要是负责从服务器获取数据
2.URL中添加请求参数,显示在地址栏
3.请求字符串限制1024个字节
比PoST 更加高效和方便。
POST
1.主要负责向服务器提交数据
2.没有大小限利
比'GET'传递数据量大,安全性高。
(2)请求头
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号"∵"分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型;
referer:页面跳转处,表明产生请求的网页来自于哪个URL,告诉服务器我是从哪个链接过来的,比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
Accept:客户端可识别的响应内容类型列表;星号“*”用于按范围将类型分组,用“/"指示可接受全部类型,用”type/*"指示可接受type类型的所有子类型;
Accept-Language:客户端可接受的自然语言;. Accept-Encoding:客户端可接受的编码压缩格式;. Accept-Charset:可接受的应答的字符集;
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机;. connection:连接方式(close或 keepalive);
Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;. Content-Length:发送给HTTP服务器数据的长度。
Content-Type:具体请求的媒体的类型信息,力图text/html 代表HTML格式,image/gif代表gif图片application/json代表son类型
Content-Range:响应资源的范围。可以在每次请求中标记请求的资源范围,在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,实现断点续传。
Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Contro并不会修改另一个消息消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、man-age、max-stake、minr-fresh、only-if-cached;响应消息中的指令包括public、privete、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age
(3)空行:
最后一个请求头之后是一个空行,发送回车符和换行符,诵知服务器以下不再有请求头;
(4)请求体:
请求体不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求体相关的最常使用的是包体类型Content-Type和包体长度Content-Length;
2.4 HTTP响应格式(状态行,响应头,空行,响应正文)
(1)状态行:
状态行由HTTP协议版本、状态码和状态码的描述文本3个部分组成,他们之间使用空格隔开;
状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
2xx:表示服务器已成功接收到请求并进行处理;
3xx:表示服务器要求客户端重定向;
4xx:表示客户端的请求有非法内容;
5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
状态码描述文本有如下取值:
200 OK:表示客户端请求成功;
400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;
401 Unauthonzed:表示请求未经授权,该状态代码必须与WWW-Authenticate 报头域一起使用;
403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
404 Not Found:请求的资源不存在,例如,输入了错误的URL;
500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;
503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;
(2)响应头
Allow:服务器支持哪些请求方法(如GET、POST等)。
Date:表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,Dec200104∶25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Set-Cookie:非常重要的header,用于把cookie发送到客户端浏览器,每一个写入cookie都会需要一个Set-Cookie。
Expires:指定Response的过期时间,从而不再缓存它,重新从服务器获取,会更新缓存。过期之前使用本地缓存。降低服务器负载,缩短加载时间。
Content-Type WEB:服务器告诉客户端自己响应的对急的类型和字符集。
、 Content-Encoding:内容编码格式
(3)空行
响应头和响应体由空行连接。最后一个响应头之后是一个空行,发送回车符和换行符,通知客户端以下不再有请响应头:
(4)响应体
该响应消息的响应体是一个html文档。浏览器可以直接识别这个html文件。而我们访问的是一个jsp文件,响应回去的是一个html文件。说明服务器将该jsp翻译成了一个html,然后再响应给浏览器。
2.5 HTTP三点注意事项
HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。
HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。ps:这种无状态的情况,并不适合我们进行业务需求,我们需要保持我们的登录状态,方便我们访问。