python进阶——爬虫(一)
网络爬虫
按照一定的规则来通过程序或者脚本来获取网络信息。
典型:百度。
通用的爬虫局限性:
- 1.不同的公司结果不一样,并不一定是我们想要的结果。
- 2.通用搜索的网络覆盖率,有限的搜索引擎资源与无线的网络数据不对称,导致两者矛盾加深。
- 3.不同的数据类型搜索效果不一。
爬虫类型
1.通用爬虫
特点
- 算法不公开
- 量大,对速度和空间要求较高,顺序要求较低
- 页面太多
- 满足的需求太广泛
原理
1、获取初始化的URL。
2、根据初始化的URL爬取页面并获取新的URL。
3、从URL队列中读取新的URL,从而获得新的网页信息,同时在新网页中获取新的URL,并重复执行。
4、满足爬虫系统设置的停止条件后,停止爬虫。
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 请求并确认请求参数来源