反扒001
作者:互联网
反爬虫项目开发
项目介绍
项目背景
为什么要有反爬虫项目
爬虫程序大量占用我们的系统资源,比如带宽/计算能力等
爬虫程序进行预订/抢票影响我们的正常业务.
导入反爬WEB工程
- 创建一个maven工程
- 创建一个module
- 将反扒参考资料\项目代码\WebProject中的代码拷贝到新建的module中
- 运行项目
- 报错:
- 使用 反扒参考资料\DB\gciantispider.sql 创建数据库的表
- 如果报getChildLst函数找不到,将SQL中下方的语句删除掉
- 启动项目,通过http://localhost:8081访问工程
- 用户名root,密码000000
反爬虫项目数据流程走向
逻辑架构
功能描述
数据管理模块
- 数据采集
负责各采集服务器的状态信息展示,比如:服务器名称/当前活跃连接数/最近3天信息采集量 - 数据处理
对查询/预定.国内/国际不同方式的数据解析规则进行配置
流程管理
- 对流程管理,负责流程的增/删/改/查/启动流程
- 对规则的配置,是否启用规则,规则的标准,规则的打分
- 对策略的分值进行控制
非功能性描述
数据的组成:
点击流(信息采集服务器)/业务日志(业务服务器)/第三方对接
数据量级计算方式:
- 估算每条数据的大小,(1-2K比较合适),如1.5K
- 估算明天数据的条数.如8亿条
- 8亿条* 1.5K=每天的数据量约1T左右.
- 如果数据全量备份,有3个备份,每天产生3T的数据
- 如果每天服务器有100T的磁盘,总共有15台服务器,总共能存储500天的数据
- 假如一天有500G数据,7台机器就行了(32核处理器/128G内存/32T硬盘)
峰值数数据量有多大?
将8亿条平均到每秒,峰值每秒20万
公司集群分类:
数据库ER图
PowerDesigner的使用
- 安装:找到安装文件反扒参考资料\PowerDesigner
新建一个model
导出SQL文件
防爬规则
数据源
数据源作为反扒的各种指标计算来源,主要包含用户请求携带的各种参数.比如:用户来源的URL,用请求的URL,用户的SessionID.查询相关的出发地/目的地/出发时间
防爬规则
- 根据每5分钟查询不同的出发地/目的地
- 根据每5分钟查询的时间最小间隔小于2秒钟
- 根据每5分钟查询的时间查询的次数大于30次
爬虫程序的特点
- 爬虫程序经常在节假日等高峰期进行爬取
- 爬虫比较稳定,不区分白天和晚上
- 爬虫经常切换出发地/目的地
- 爬虫爬取频次比较高
- 爬虫携带的浏览路径信息不完整
数据采集
安装Openresty
- 到目录反扒参考资料\OpenResty找到openresty-1.13.6.1.tar.gz
- 解压 tar -xzvf openresty-1.13.6.1.tar.gz
配置Openresty
./configure --prefix=/usr/local/openresty --with-http_stub_status_module
- make && make install
如果缺少依赖,安装依赖
yum install readline-devel pcre-devel openssl-devel perl gcc
如果不想自己编译,资料中 反扒参考资料\OpenResty\编译后\openresty是编译好的.直接放入Linux中就可以使用
- 进入/export/servers/openresty/nginx目录下
- 执行sbin/nginx执行程序(使用chmod u+x nginx赋予执行权限)
- 通过浏览器访问:
Lua语法入门
使用方式
交互方式
- 使用lua命令启动交互窗口
- 输入执行的命令print(“hello world”)
文件方式
- 创建lua脚本文件
vim helloworld.lua - 执行脚本文件
lua helloworld.lua
数据类型
java中的数据类型
数字相关的:
整型:
byte/int/short/long
浮点型:
float/double
布尔类型: boolean
字符类型: char
Lua 数据类型
nil:==java中的null
boolean:布尔类型
number:数字类型,不区分整型和浮点型
string:字符串
userdata: C的数据结构
function:函数(方法)
thread:线程
table:集合/数组/Map
Lua运算符
赋值运算符
--赋值运算符
a = 3
b = "hello"
print(a)
print(b)
c,d = 1,2
print(c,d)
e,f = 1,2,3
print(e,f)
g,h = 1
print(g,h)
str = "hello" .. "world"
print(str)
字符串的拼接操作不能使用"+",应该使用".."进行拼接
算术运算符
-- 算术运算符
-- 加减乘除取余
a,b = 10,20
print("a+b=" .. a + b)
print("a-b=" .. a - b)
print("a*b=" .. a * b)
print("a/b=" .. a / b)
print("a%b=" .. a % b)
关系运算符
-- 关系运算符
print("========= 关系运算符 =========")
a,b = 1,2
print("a等于b" .. a == b)
print("a不等于b" .. a ~= b)
print(a > b)
print(a >= b)
print(a < b)
print(a <= b)
- 不等于需要~=来表示
- 字符串不能和关系运算符进行拼接
逻辑预算符
-- 逻辑运算符
print("========= 逻辑运算符 =========")
a,b = true,false
print(a and b)
print(a or b)
print (not b)
其它运算符
- ".."拼接字符串
"#"用来获取字符串或者集合的长度
--其它运算符
print("========其它运算符===========")str = "hello java"
print(#str)
Lua流程控制
if条件判断
-- 条件控制
-- if条件判断
a = 10
if a > 5
then
print("a>5")
end
-- if - else 条件判断
if a > 11
then
print("a>11")
else
print("a<=11")
end
-- if 嵌套
if a > 5
then
print("a>5")
if a < 12
then
print("a<12")
end
end
循环
while循环
--While循环
print("=======while循环=======")
while a > 0
do
print(a)
a = a - 1
end
repeat循环
-- repeat循环
print("=======repeat循环=======")
repeat
print(a)
a = a + 1
until a > 10
repeat循环最少执行一次
假如一张纸的厚度为0.04,累计叠多少次才能超过珠穆朗玛峰的高度8847.
for循环
--for循环
print("=======for循环=======")
for b = 10, 1,-1
do
print(b)
end
for循环后面3个参数
- 初始化变量
- 循环终止条件(包含等于的条件)
- 步长,默认情况下此参数可以省略,默认为1
Lua的数组
--lua的数组
arr = {"zhangsan","lisi","wangwu"}
print(#arr)
for a = 1,#arr
do
print(arr[a])
end
--使用泛型for循环
for i,name in ipairs(arr)
do
print(i,name)
end
注意:
使用ipairs的时候,只能针对于集合/数组
遍历Map数据结构的时候需要使用pairs关键字
标签:..,爬虫,运算符,001,循环,反扒,print 来源: https://www.cnblogs.com/jeasonchen001/p/11192075.html