爬虫概念
网络爬虫:Spider(网络蜘蛛)通过互联网上一个个的网络节点,进行数据的提取、整合以及存储。从而获取我们想要的部分。
聚焦爬虫:根据客户的需求,定制一些针对性比较强的爬虫
robots协议:robots协议不是技术层面的协议,只是一个君子协定;
首先在爬取一个网站的时候,第一步就是访问这个网站的robots.txt文件,在这个文件中规定了那些东西能爬哪些东西不能爬,
爬虫要严格遵守,只爬取允许的内容,不要去爬取不允许的内容,搜索引擎爬虫一定遵守robots协议;我们写的话可以不遵守。
工作原理:
- 发起请求
通过HTTP库向目标站点发起一个Request请求,请求可以包含额外的header等信息,等待服务器响应
- 获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,
类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型
- 解析内容
得到的内容:可能是HTML,可以用正则表达式,页面解析库进行解析,
可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理
- 保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件
工作流程:
1、数据提取(抓取)
技术:http协议等应用层协议
反爬:用户代理、IP禁止、验证码、会话处理等
2、数据的解析
遇到的数据:html、json、xml、js数据
反爬:js动态加载、js加密、后台加密等
3、数据的存储
CSV数据、json数据、关系型数据库、非关系型数据库
Request请求|Respon响应
浏览器发送消息给网址所在的服务器,这个过程就叫做HTPP Request
服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应的处理,然后把消息回传给浏览器,这个过程就是HTTP Response
浏览器收到服务器的Response信息后,会对信息进行相应的处理,然后展示
Request中包含什么
请求方式:主要有:GET/POST两种类型常用,另外还有HEAD、PUT、DELETE、OPTIONS
GET: 向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,
例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问
POST: 向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。
数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。
它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
PUT:向指定资源位置上传其最新内容。
OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。
用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
DELETE:请求服务器删除Request-URI所标识的资源。
请求URL
URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,
是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL格式组成:由三个部分
- 第一部分是协议(或称为服务方式)。
- 第二部分是存有该资源的主机IP地址(有时也包括端口号)。
- 第三部分是主机资源的具体地址,如目录和文件名等。
爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据。
请求头:包含请求时的头部信息,如User-Agent,Host,Cookies等信息,
请求体:请求是携带的数据,如提交表单数据时候的表单数据(POST)
Response中包含了什么
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
响应状态
有多种响应状态,如:200代表成功,301跳转,404找不到页面,502服务器错误
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求
- 4xx请求错误——请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器在处理某个正确请求时发生错误
- 常见代码:
- 200 OK 请求成功
- 301 目标永久性转移
- 302 目标暂时性转移
- 400 Bad Request 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 Forbidden 服务器收到请求,但是拒绝提供服务
- 404 Not Found 请求资源不存在,eg:输入了错误的URL
- 500 Internal Server Error 服务器发生不可预期的错误
- 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
响应头:如内容类型,类型的长度,服务器信息,设置Cookie,
响应体:最主要的部分,包含请求资源的内容,如网页HTMl,图片,二进制数据等
HTTP
什么是HTTP协议
1)是一个基于请求与响应的应用层协议,底层协议是TCP保证了整个传输过程的可靠性
2)通过url来进行客户端与服务器的交互(url解释:统一资源定位符,用于定位互联网上资源的位置,
格式,协议://主机名.域名:端口号/路径名...?参数1=值1&参数2=值2&....#锚点)
3)是一种C/S(B/S是一种特殊的C/S结构)模式的协议,客户端发起请求,服务端处理请求并响应
4)它是一种无状态的协议,它通过cookie或者session来处理会话信息
http的过程
1)创建TCP链接:三次握手,
客户端首先向服务器发出一个是否同意创建连接的请求,
然后服务根据自己的任务量决定是否创建,并且把是否创建连接的相关信号返回给客户端,
然后客户端如果接到了同意创建连接的信号,就正式的发起一个创建连接的信号,并且带上http协议的报文。
通过三次握手客户端和服务器之间建立齐了一条数据通路,就可以保证HTTP协议的可靠传输
2)客户端向服务器发起HTTP请求:通过url把参数以及请求头信息传递给服务器,常见的请求方式有4中,常用的是get和post
请求头:包含了本次请求的相关配置信息(比如:主机、cookie、数据格式等),决定了客户端和服务之间数据交流的方式与格式
请求体:就是参数,也即是客户端要想服务器提交的数据
3)服务器处理请求,并且把数据响应出去
4)判断数据是否传输结束,如果结束,四次挥手断开TCP链接
get请求和post请求的区别
get请求参数拼接在url后面的,post请求参数不体现在url中(一般直接通过表单提交);
get请求数据量有限制(不同的浏览器对url的长度都有不同的限制),post请求是没有限制的
状态码
1 100:继续 客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。 2 3 101:转换协议 在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施。 4 5 102:继续处理 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。 6 7 200:请求成功 处理方式:获得响应的内容,进行处理 8 9 201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到 处理方式:爬虫中不会遇到 10 11 202:请求被接受,但处理尚未完成 处理方式:阻塞等待 12 13 204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。 处理方式:丢弃 14 15 300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃 16 301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL 17 18 302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL 19 20 304:请求的资源未更新 处理方式:丢弃,使用本地缓存文件 21 22 400:非法请求 处理方式:丢弃 23 24 401:未授权 处理方式:丢弃 25 26 403:禁止 处理方式:丢弃 27 28 404:没有找到 处理方式:丢弃 29 30 500:服务器内部错误 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。 31 32 501:服务器无法识别 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。 33 34 502:错误网关 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 35 36 503:服务出错 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。