反爬虫项目Day2

主要功能用例

对项目实现模块的说明

  1. 数据管理模块

数据管理模块分为数据采集和数据处理模块,对于数据采集使用lua脚本,对于数据处理,来自前端页面的不同类型的数据要进行相应的处理,如json格式、xml格式、From格式的数据等。

  1. 实时监控模块

实时监控模块分为系统监控、规则监控、性能监控。
系统监控:监控流量和爬虫。
规则监控:制定相应的规则,防爬。
性能监控:主要关注数据分析的速度。

  1. 策略管理模块

策略管理模块分为:策略配置和规则打分。
策略配置:设置防爬规则的阈值从而过滤得到爬虫ip黑名单。
规则打分:【防爬规则打分】。

  1. 流程管理模块

流程管理包括:查看流程、删除流程、新建流程、修改流程、运行和暂停流程,这些个部分是基于Web项目来实现的。

  1. 规则的管理模块

进行防爬规则的指定,如:单位时间内的IP段访问量、单位时间内关键页面的访问总量、单位时间内UA(浏览器代理)出现的次数、单位时间内关键页面最短的访问间隔以及单位时间内查询不同商品、行程的次数等。

  1. 数据的可视化模块

将统计出来的指标如:转化率、爬虫对系统稳定性的影响、爬虫对爬定比的影响等,将这些个指标以图形的形式体现出来。

数据库的ER图

ER图分为实体、属性、关系三个核心的部分。
在进行ER图的绘制时,实体用长方形表示,属性用椭圆形表示,关系用菱形来表示。
ER图的实体(entity) 即数据模型中的数据对象,例如人、学生、音乐都可以作为一个数据对象,用长方体来表示,每个实体都有自己的实体成员(entity member)或者说实体对象(entity instance),例如学生实体里包括张三、李四等,实体成员(entity member)/实体实例(entity instance) 不需要出现在ER图中。
ER的实体还分为若实体和复合实体

弱实体: 一个实体必须依赖另一个实体存在。那么前者是弱实体,后者是强实体。弱实体必然依赖强实体而存在。两者之间的联系必然只有1:1或者1:N的关系。由于弱实体完全依赖于强实体,强实体不存在,那么弱实体就不存在,所以弱实体是完全参与联系的,因此弱实体与联系之间的联系也是用的双线菱形。

复合实体: 复合实体也称联合实体或桥接实体,常常用于实现两个或多个实体间的M:N联系,它由每个关联实体的主玛组成,用长方体内加一个菱形来表示。
注意: ER图只能用于关系型数据库,对于非关系型的数据库则不适用。

ER图的属性(attribute) 即数据对象所具有的属性,例如学生具有姓名、学号、年级等属性,用椭圆形表示,属性分为唯一属性( unique attribute)和非唯一属性,唯一属性指的是唯一可用来标识该实体实例或者成员的属性,用下划线表示,一般来讲实体都至少有一个唯一属性。

ER图的关系(relationship) 用来表现数据对象与数据对象之间的联系,例如学生的实体和成绩表的实体之间有一定的联系,每个学生都有自己的成绩表,这就是一种关系,关系用菱形来表示。
ER图中关联关系有三种:

1对1(1:1) :1对1关系是指对于实体集A与实体集B,A中的每一个实体至多与B中一个实体有关系;反之,在实体集B中的每个实体至多与实体集A中一个实体有关系。

1对多(1:N) :1对多关系是指实体集A与实体集B中至少有N(N>0)个实体有关系;并且实体集B中每一个实体至多与实体集A中一个实体有关系。

多对多(M:N) :多对多关系是指实体集A中的每一个实体与实体集B中至少有M(M>0)个实体有关系,并且实体集B中的每一个实体与实体集A中的至少N(N>0)个实体有关系。
声明: 关于ER图的解释采纳数据库ER图基础概念

防爬规则的总结

此处对防爬规则进行一个详细的介绍

  1. 数据源

与行程相关的:出发地、目的地、出发时间等。
与出行人相关的:身份信息、出行人数等。
与预定相关的:购票人信息(登录ID、登录类型、操作IP、浏览器UA、手机设备信息)、联系人信息(联系人名、联系人手机号、联系人邮箱等。

  1. 防爬规则

按单次请求 - UA中出现非浏览器字样
按IP地址聚合 - 任意X分钟内查询超过Y次
按IP地址聚合 - 连续X次查询时间间隔均小于Y秒
按IP地址聚合 - 任意X分钟内查询时间间隔的方差小于Y
按IP地址聚合 - 任意X分钟内,每分钟的查询频次的方差小于Y
按IP地址聚合 - 任意X分钟内,查询不同出发地超过Y处

  1. 爬虫存在

爬虫多存在于热门航线、寒暑假购票、网上秒杀商品等

  1. 爬虫的特点

长期的、重复爬取数据
使用多个代理(隔几分钟自动切换UA、IP)爬取数据
单个IP在短时间内爆发较高的流量(请求次数)
单个IP在白天和晚上的请求次数相同
浏览路径不完整(一次命中会话)

OpenResty

Openresty简介

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

OpenResty的安装

  1. 在进行OpenResty安装之前需要安装相应的依赖
yum install -y readline-devel pcre-devel openssl-devel perl gcc
  1. 安装好依赖之后,进行如下步骤
1、解压
2、./configure --prefix=/usr/local/openresty --with-http_stub_status_module
3、make && make install
其中 --prefix=/usr/local/openresty 程序会被安装到/usr/local/openresty目录。
可以手动更改。
  1. 启动操作
cd /openresty/nginx/sbin
./nginx

启动报错处理:
若提示启动失败
nginx: [emerge] bind() to 0.0.0.0.80 failed (98: Address already in use)
进入到conf目录修改nginx.conf文件修改端口,保证不被占用即可。
反爬虫项目Day2_第1张图片

Lua环境的安装和运行

虚拟机中安装Lua
执行以下命令:

tar zxf lua-5.3.4.tar.gz
cd lua-5.3.4
make linux test
make install
安装完成之后,在命令行输入lua -v 出现如下显示,说明安装成功 
Lua 5.3.4 Copyright (C) 1994-2017 Lua.org,PUC-Rio

在IDEA中整合Lua
首先本地物理机需要安装Lua,其次IDEA中也需要安装emmyLua插件。
在main下新建lua文件夹,单机鼠标右键,make directory as ----> SourceRoot
之后就可以 new Lua File

输出print(‘hello world’)报错
在这里插入图片描述
解决方法:
反爬虫项目Day2_第2张图片
之后便可运行成功。

IDEA操作Lua联系代码:

--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by User.
--- DateTime: 2020/2/25 16:21
---
--print("hello world")
--print('hello world')

-- 单行注释

--[[
多行注释
]]

-- 数据类型
print(type(100))  -- number
print(type(3.14))   -- number
print(type('abcd')) -- String
print(type(false)) --boolean
print(type({1,'abc',{'d'}}))   -- table类型用{}表示

-- 变量
--1、全局变量
--除了用local声明的变量之外,所有的变量都是全局变量。

n1 = 111  --全局变量




--2、局部变量
--用local声明的变量,就是局部变量。局部变量的作用域是从声明变量开始到语句快结束为止。
--eg:声明在函数里的局部变量,出了函数就不好使了,声明在整个脚本中的local变量,出了脚本就不好使了。
--表的域:声明在表中的变量,出了表就不好使了。

local n2 = 222  --局部变量

function func1(args1)
    n3 = 333 -- 全局变量
    local n4 = 444 --局部变量
    print(args1)
end

func1(n2)

print("n1=" , n1)
print("n2=" , n2)
print("n3=" , n3)
print("n4=" , n4)
print("n5=" , n5)  --没有声明不会报错

-- 注意:定义在函数中的全局变量必须要调用函数,全局变量才能被声明
function func2(arg1)
    n6 = 666
    print(arg1)
end

func2(n1)
print("n6=",n6)

扩展:

QPS、TPS、PV、UV、GMV、IP、RPS分别代表的含义。

QPS:

全名 Queries Per
Second,意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

简单的说,QPS = req/sec = 请求数/秒。它代表的是服务器的机器的性能最大吞吐能力。

TPS

即 Transactions Per Second
的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。

TPS 的过程包括:客户端请求服务端、服务端内部处理、服务端返回客户端。

Qps 基本类似于 Tps,但是不同的是,对于一个页面的一次访问,形成一个
Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。

例如,访问一个 Index 页面会请求服务器 3 次,包括一次 html,一次 css,一次
js,那么访问这一个页面就会产生一个“Tps”,产生三个“Qps”。

PV

PV(page view)即页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。

PV 即 page view,页面浏览量。用户每一次对网站中的每个页面访问均被记录 1 次。用户对同一页面的多次刷新,访问量累计。

与 PV 相关的还有 RV,即重复访问者数量(repeat visitors)。

UV

UV 访问数(Unique Visitor)指独立访客访问数,统计 1 天内访问某站点的用户数(以 cookie
为依据),一台电脑终端为一个访客。

可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的 cookies 实现的。如果更换了 IP 后但不清除
cookies,再访问相同网站,该网站的统计中 UV 数是不变的。如果用户不保存 cookies 访问、清除了 cookies
或者更换设备访问,计数会加 1。00:00-24:00 内相同的客户端多次访问只计为 1 个访客。

IP

IP(Internet Protocol)独立 IP 数,是指 1 天内多少个独立的 IP 浏览了页面,即统计不同的 IP
浏览用户数量。同一 IP 不管访问了几个页面,独立 IP 数均为 1;不同的 IP 浏览页面,计数会加 1。IP 是基于用户广域网 IP
地址来区分不同的访问者的,所以,多个用户(多个局域网 IP)在同一个路由器(同一个广域网 IP)内上网,可能被记录为一个独立 IP
访问者。如果用户不断更换 IP,则有可能被多次统计。

GMV

所谓的 GMV,是 Gross Merchandise Volume
的简称。只要是订单,不管消费者是否付款、卖家是否发货、是否退货,都可放进 GMV 这个“大箩筐”里。

RPS

RPS 代表吞吐率,即 Requests Per Second 的缩写。吞吐率是服务器并发处理能力的量化描述,单位是
reqs/s,指的是某个并发用户数下单位时间内处理的请求数。 某个并发用户数下单位时间内能处理的最大的请求数,称之为最大吞吐率。

有人把 RPS 说等效于 QPS。其实可以看作同一个统计方式,只是叫法不同而已。RPS/QPS,可以使用 apche ab 工具进行测量。

你可能感兴趣的:(spark,flink,kafka)