python进阶——爬虫(一)——爬虫简介

网络爬虫

按照一定的规则来通过程序或者脚本来获取网络信息。

典型:百度。

通用的爬虫局限性:

  • 1.不同的公司结果不一样,并不一定是我们想要的结果。
  • 2.通用搜索的网络覆盖率,有限的搜索引擎资源与无线的网络数据不对称,导致两者矛盾加深。
  • 3.不同的数据类型搜索效果不一。

爬虫类型

1.通用爬虫

特点

  • 算法不公开
  • 量大,对速度和空间要求较高,顺序要求较低
  • 页面太多
  • 满足的需求太广泛

原理

1、获取初始化的URL。
2、根据初始化的URL爬取页面并获取新的URL。
3、从URL队列中读取新的URL,从而获得新的网页信息,同时在新网页中获取新的URL,并重复执行。
4、满足爬虫系统设置的停止条件后,停止爬虫。
python进阶——爬虫(一)——爬虫简介

2.聚焦爬虫

又为主题爬虫,集中关注的主题。

原理

1、指定方案
2、初始化的URL
3、根据初始的URL爬取页面并获得新的URL。
4、从新的URL过滤掉与需求无关的URL。
5、在URL队列中,根据算法确定URL的优先级。
6、得到新的URL,将新的URL重新上面的路径。
7、满足条件停止后结束。

3.增量爬虫

除了已经获取的网络信息,有更新继续增加。

4.深层网络爬虫

有些东西我们在表面无法爬取,需要登录才看得到内容,就会用到深层网络爬虫。

搜索策略

将搜索范围看成树。

深度优先

深度优先就相当于我们一路沉到底,在这路上找到我们要的节点。

例子: 一个网站很多URL,深度优先通过首页的URL进入然后通过这个页面的URL进入新的URL,不断循环,知道返回页面没有URL为止。

宽度优先

宽度优先就是我们先找到大节点,看一遍该节点下的所有子节点,再找再看,一直到我们想要的节点。

例子:搜索一个web页面的所有URL,然后搜索下一层,直到底层为止。

聚焦爬虫的策略

聚焦爬虫策略就是搜索最优解,直接找到自己想要的节点。

针对某个特定的主题的页面,根据最后最有的原则进行访问。

爬虫的合法性

风险

1、与黑客技术结合,攻击网站后台,从而获取后台数据
2、攻击网站,造成不能正常运营。

如何避免

时常优化我们的程序,避免干扰被访问的网站的正常运营。
及时审查爬取的数据,如果出现涉及用户隐私,商业机密或者其他敏感的数据时,应该要及时停止或禁止传播。

正规的开发流程

1、需求说明。
2、爬虫开发计划。
3、功能开发。
4、部署交付。

反爬虫/反反爬虫

判断一个网站是否有反爬机制,需要从多个方面进行判断

1、用户请求的Headers
在爬虫中添加Headers请求头,就能很好解决

2、操作网站的行为
a 使用代理IP,IP在IP代理平台的API获取,每次或者每几次更换一次IP,这样就很容易绕过行为判断。
b 每次请求间隔几秒钟再发送下一次请求,只需要在代码中加一个简单的延时就可以解决了。

3、网站目录加载的方式
分析网站的设计,找到Ajax请求,分析具体的请求参数和响应的数据结构和含义,在爬虫中模拟Ajax请求,就能获取所需要的数据。

4、数据加密
一般采用自动化测试技术,调用浏览器内核,模拟人为操作网页并触发网页的JS脚本,实现自动化操作网页。

5、验证码识别(最有效的反爬虫技术)
第三方平台处理或者OCR及时识别。

robots.text
君子协议,规定了网站中哪些数据可以被爬虫爬取,哪些数据不可以被爬取。

http 协议

服务器端和客户端进行交互(数据交换)的协议。

HTTP通信的过程简介

通过使用WEB浏览器/网络爬虫或者其他的工具,客户端发起一个到服务器上指定的端口(默认80)的HTTP请求,这个客户端叫做用户代理,响应的服务器为源服务器,请求之后HTTP服务器会在这个端口监听用户端发过来的请求,一旦收到请求,服务器就会发送一个状态行或响应的消息,消息可能是请求的文件或者错误信息或者其他的一些信息。

一般采用TCP。

对比

http

https http+S(SSL)

HTTPS握手的过程:

1、浏览器将自己支持的一套加密规则发送给网站。

2、网站从中选出一组加密算法或者HASH算法并将自己的身份信息以证书的形式发送给浏览器(网站、证书的加密公式、颁发的机构)

3、浏览器做如下工作——

  • a 验证证书的合法性
  • b 形成一串密码
  • c 确认加密方式

4、网站接收浏览器发过来的数据

  • a 利用自己的钥匙解密信息
  • b 加密一段握手,发送给用户浏览器

5、进行一次完整的数据测试

加密算法

1、非对称加密算法 如:RSA DSA/DSS
应用场景:用于握手过程中加密生成的密码

2、对称加密算法 如: AES RC4 3DES
应用场景:用于对真正传输的数据进行加密

3、HASH算法 如:MD5 SHA1 SHA256
应用场景:用于验证数据的完整性

请求头

Headers 描述客户端向服务器端发送请求时使用的协议类型,编码以及发送内容长度等。

请求头的参数

Accept:浏览器可以接收的数据类型
Accept-Encoding:浏览器可以接收的压缩编码的类型
Accept-Language:浏览器可以接手的编码语言
Connection:
Host:请求的主机地址和端口
User-Agent:浏览器相关信息(爬虫请求头这项必须要有)

cookies

也可以成为cookie,指某些网站为了识别用户的身份,进行Session跟踪而存储在本地终端的数据
Domain: 域 表示当前cookies属于哪个域或子域
Path:所属路径

特点

a 极高的扩展性和可用性
b 通过良好的编程控制保存对象的大小
c 通过加密和安全传输技术减少被**的可能性
d 只存储不敏感的数据,即使被盗也不会有重大的损失
e 可控制声明期,使之不会永远有效.

HTML

常用标签:

img 图片
a 锚
strong 加重(文本)
em 强调文本
i 斜体字
b 粗体文本
br 换行
div 分隔
span 范围
ol 排序列表
ul 无序列表
h1-h5 标题
p 段落
tr 表格中的一行
th 表格中的表头
td 表格中的单元格

javascript

一种直译式脚本语言是一种动态类型 弱类型 基于原型的语言,内置支持类型

Ajax

不是一种新的编程语言,而是一种用于创建更好 更快以及交互性更强的web应用程序技术.

其他内容(浏览器分析、数据浏览)

总结分析网站的步骤:
a 找出数据来源,大部分数据来源于Doc XHR 和JS标签
b 找到数据所在的请求,分析其请求链接 请求方式和请求方式
c 请求并确认请求参数来源