爬虫的认识及原理

206 阅读8分钟

认识爬虫

爬虫的概念

什么是爬虫

网络爬虫又叫网络蚂蚁、网络蜘蛛、网络机器人等,网络爬虫可以自动化浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则去进行,这些规则我们称之为网络爬虫算法。使用python可以很方便的编写出爬虫程序,进行互联网信息的自动化检索

  • 简单来说就是程序代替人去模拟浏览器获取数据的一种方法

为什么需要爬虫

随着大数据时代的来临,网络爬虫在互联网中的地位越来越重要。互联网中的数据是海量的,如何自动高效地获得互联网中我们感兴趣的信息并为我们所用是一种重要的问题,而爬虫就是为了解决这些问题而生的。

我们感兴趣的信息分为不同的类型:如果只是做搜索引擎,那么感兴趣的信息就是互联网中尽可能多的高质量网页;如果要获取某一垂直领域的数据或者有明确的检索需求,那么感兴趣的信息就是根据我们检索和需求所定位的那些信息,此时,需要过滤掉一些无用的信息。前者我们称之为通用网络爬虫,后者我们称之为聚焦网络爬虫

企业获取数据的方法

  • 公司自有的数据
  • 第三方平台购买的数据(百度指数、数据堂)
  • 爬虫爬取的数据

爬虫的分类

  • 通用网络爬虫,例如:baidu;Google
  • 聚焦网络爬虫:根据既定的目标有选择地抓取某一特定主题内容

注意:爬虫是有风险的,要在合法的前提下,才能去运用这项技术

爬取的过程

爬取的原理模拟浏览器的操作获取数据(获取数据的过程)

浏览器执行的流程:

  • 浏览器首先进行DNS域名解析,得到对应的IP地址
  • 根据这个IP,找到对应的服务器,建立TCP连接(三次握手)
  • 建立TCP连接后向服务器发起HTTP请求,浏览器得到服务器响应的HTML代码
  • 浏览器对获取到的HTML代码进行解析和渲染,最终显示出页面

认识URL

发送http请求的时候,通过URL对网络资源进行定位。

URL(Uniform Resource Locator),中文名称叫统一资源定位符,是用来标识某一处资源的地址,即是我们常说的网址。

URL的组成:

image.png

协议

网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者“规则”,有了这种“约定”,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。

TCP协议

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、 基于IP的通信协议。

三次握手----建立连接

image.png

四次挥手----断开连接

image.png

HTTP协议

HTTP协议(Hyper Text Transfer Protocol),它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的超文本传输协议。HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML文件、图片文件、查询结果等。

HTTP协议一般用于B/S架构(浏览器/服务器结构)。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL(Secure Sockets Layer)层

HTTP特点

  1. HTTP协议支持客户端/服务端模式,也是一种请求/响应模式的协议
  2. 简单快速:客户端向服务端请求服务时,只需要传送请求方法和路径。请求方法常用的有:getpost、head
  3. 灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记
  4. 无连接:限制每次连接只处理一个请求,服务器处理完请求,并收到客户端的应答后,即断开连接,采用这种方式可以节省传输时间。(但是现在随着技术的发展,有了Connection keep-alive:可以保持长连接)
  5. 无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。为了弥补这种不足,产生了两项记录http状态的技术,一个叫Cookie,一个叫Session

Cookie和Session

相同之处:都是用来跟踪浏览器用户身份的会话方法

Cookie工作原理:

Cookie是浏览器请求服务器时,服务器生成的一些客户端信息(用户名、密码、偏好设置等),服务器会将Cookie信息发送给浏览器端,浏览器再次请求服务器的时候,会带上这个Cookie信息,服务端通过识别Cookie信息来判断区分不同的用户

Session工作原理

浏览器在第一次请求服务器的时候,服务器会创建一个Session(Session中包括用户信息、用户操作以及SexxionID)保存在服务器中同时创建特殊的Cookie(name为JSESSIONID,value为Session对象的ID)然后将Cookie返回到浏览器基于Cookie

Cookie和Session的区别:

存储位置:Cookie主要存储于客户端(浏览器),而Session主要存储在服务器端

存储大小:Cookie存储的数据量较小,而Session存储的数据量较大

安全性:Cookie存储于客户端,对客户是可见的,可被客户端窥探、复制、修改,存在一定的安全隐患;而Session存储于服务器上,不存在敏感信息泄露的风险

数据类型:Cookie中只能保存ASCII字符串,而Session可以保存任意类型的数据

HTTP的请求与响应

HTTP通信由两部分组成:客户端请求信息服务器端响应信息

image.png

  1. 当用户在浏览器的地址栏中输入一个URL并按下回车键之后,浏览器会向HTTP服务器发送请求。(HTTP请求方式主要分为GETPOST两种方法)
  2. 服务器把URL对应的文件发送回浏览器(响应
  3. 浏览器分析服务器发送的HTML,发现其中引用了很多其他文件,比如image文件、css文件、js文件。浏览器会自动再次发送Request(请求)去获取图片、css文件或者js文件
  4. 当所有的文件都拿到之后,网页会根据HTML语法结果,完整渲染出页面

注意:get:用于获取数据,不需要登录;post:用于获取数据,需提交一些数据

请求报文

一个典型的HTTP请求示例打开控制台,查看Request Headers

image.png

请求报文由请求行请求头部请求正文(POST请求)

请求行:GET / HTTP/1.1,包括请求方法和HTTP协议版本

常见的请求头部:

  • User-Agent:发送请求的载体,一般来说是浏览器
  • Referer:防盗链,页面跳转处,表明请求是来自于哪个主页面(可以用于反爬)
  • Cookie:存储浏览器相关的信息

HOST:请求资源所在服务器

Connection keep-alive:建立长连接

User-Agent:客户端程序的信息,就是我发送请求的浏览器信息(表明运用的是什么载体去访问的,这个一般要有,不然会被识别到是程序在浏览)

Accept:列出了浏览器可以接收的媒体数据类型

deflate:组合使用zlib格式和deflate压缩算法生成的编码格式

Accept-Language: 告知服务器浏览器能够处理的自然语言集(中文、英文等)。zh-CN中文简体

Cookie:浏览器记录的用户相关信息

响应报文

响应报文由:状态码响应头部响应主体

image.png

状态码:

  • 1XX- 信息型,服务器收到请求,需要请求者继续操作。
  • 2XX- 成功型,请求成功收到,理解并处理。
  • 3XX - 重定向,需要进一步的操作以完成请求。
  • 4XX - 客户端错误,请求包含语法错误或无法完成请求。
  • 5XX - 服务器错误,服务器在处理请求的过程中发生了错误。

常见状态码:

  • 200 OK - 客户端请求成功
  • 400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
  • 401 Unauthorized - 请求未经授权
  • 404 - 请求资源不存在,可能是输入了错误的URL
  • 500 - 服务器内部发生了不可预期的错误
  • 503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

响应头部:

服务器发送给浏览器的一些参数信息

响应主体部分:

在开发者工具中,点击response,可以看到服务器返回给浏览器响应主体内容