其他分享
首页 > 其他分享> > 反扒001

反扒001

作者:互联网

反爬虫项目开发

项目介绍

项目背景

为什么要有反爬虫项目

爬虫程序大量占用我们的系统资源,比如带宽/计算能力等

爬虫程序进行预订/抢票影响我们的正常业务.

导入反爬WEB工程

  1. 创建一个maven工程
  2. 创建一个module
  3. 将反扒参考资料\项目代码\WebProject中的代码拷贝到新建的module中
  4. 运行项目
  5. 报错:
  6. 使用 反扒参考资料\DB\gciantispider.sql 创建数据库的表
    • 如果报getChildLst函数找不到,将SQL中下方的语句删除掉
  7. 启动项目,通过http://localhost:8081访问工程
  8. 用户名root,密码000000

反爬虫项目数据流程走向

逻辑架构

功能描述

数据管理模块

  1. 数据采集
    负责各采集服务器的状态信息展示,比如:服务器名称/当前活跃连接数/最近3天信息采集量
  2. 数据处理
    对查询/预定.国内/国际不同方式的数据解析规则进行配置

流程管理

  1. 对流程管理,负责流程的增/删/改/查/启动流程
  2. 对规则的配置,是否启用规则,规则的标准,规则的打分
  3. 对策略的分值进行控制

非功能性描述

数据的组成:

点击流(信息采集服务器)/业务日志(业务服务器)/第三方对接

数据量级计算方式:

  1. 估算每条数据的大小,(1-2K比较合适),如1.5K
  2. 估算明天数据的条数.如8亿条
  3. 8亿条* 1.5K=每天的数据量约1T左右.
  4. 如果数据全量备份,有3个备份,每天产生3T的数据
  5. 如果每天服务器有100T的磁盘,总共有15台服务器,总共能存储500天的数据
  6. 假如一天有500G数据,7台机器就行了(32核处理器/128G内存/32T硬盘)

峰值数数据量有多大?

将8亿条平均到每秒,峰值每秒20万

公司集群分类:

数据库ER图

PowerDesigner的使用

  1. 安装:找到安装文件反扒参考资料\PowerDesigner
  2. 新建一个model

  3. 导出SQL文件

防爬规则

数据源

数据源作为反扒的各种指标计算来源,主要包含用户请求携带的各种参数.比如:用户来源的URL,用请求的URL,用户的SessionID.查询相关的出发地/目的地/出发时间

防爬规则

  1. 根据每5分钟查询不同的出发地/目的地
  2. 根据每5分钟查询的时间最小间隔小于2秒钟
  3. 根据每5分钟查询的时间查询的次数大于30次

爬虫程序的特点

  1. 爬虫程序经常在节假日等高峰期进行爬取
  2. 爬虫比较稳定,不区分白天和晚上
  3. 爬虫经常切换出发地/目的地
  4. 爬虫爬取频次比较高
  5. 爬虫携带的浏览路径信息不完整

数据采集

安装Openresty

  1. 到目录反扒参考资料\OpenResty找到openresty-1.13.6.1.tar.gz
  2. 解压 tar -xzvf openresty-1.13.6.1.tar.gz
  3. 配置Openresty

    ./configure --prefix=/usr/local/openresty --with-http_stub_status_module

  4. make && make install
  5. 如果缺少依赖,安装依赖

    yum install readline-devel pcre-devel openssl-devel perl gcc

如果不想自己编译,资料中 反扒参考资料\OpenResty\编译后\openresty是编译好的.直接放入Linux中就可以使用

  1. 进入/export/servers/openresty/nginx目录下
  2. 执行sbin/nginx执行程序(使用chmod u+x nginx赋予执行权限)
  3. 通过浏览器访问:

Lua语法入门

使用方式

交互方式

  1. 使用lua命令启动交互窗口
  2. 输入执行的命令print(“hello world”)

文件方式

  1. 创建lua脚本文件
    vim helloworld.lua
  2. 执行脚本文件
    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)
  1. 不等于需要~=来表示
  2. 字符串不能和关系运算符进行拼接

逻辑预算符

-- 逻辑运算符
print("========= 逻辑运算符 =========")
a,b = true,false

print(a and b)
print(a or b)
print (not b)

其它运算符

  1. ".."拼接字符串
  2. "#"用来获取字符串或者集合的长度

    --其它运算符
    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. 初始化变量
  2. 循环终止条件(包含等于的条件)
  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