数据采集-用户数据采集|学习笔记

简介: 快速学习数据采集-用户数据采集

开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop框架搭建):数据采集-用户数据采集】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/670/detail/11617


数据采集-用户数据采集

 

内容简介:

一、采集支撑反爬虫项目的数据

二、将数据用“#CS#进行拼接

三、代码实现

四、总结

 

一、采集支撑反爬虫项目的数据

1、上节回顾

上节已经把分区编号处理完了,

代码如下所示:

--实例将要打入 kafka 的数据

local message=“12345-678910

--3 发送数据

kafkaProducer : send(topic, partitionNumber, message)

2、支撑反爬虫识别的数据类型

处理完了还差一个 message 的内容,上文代码中 Message 依然是写死的。主要获取用来支撑反爬虫识别的数据,这些数据到底有哪些?实际上之前已经整理过,

 

如下所示:

Requst   请求的连接

Request Method 请求的方法

Remote Address 客户端地址

Request parameter 请求参数(包括Form表单)

Content-Type Content-Type请求头等字段

Cookie 请求cookie

Server Address 服务器地址

Referer  跳转来源

User-Agent 用户终端浏览器信息

Time-lso8601 访问时间ISO格式

Time-local  访问时间

需要用到以上这么多数据来支撑,因为现在 message 是写死的,所以直接获取上述数据就可以,比如像 Time-local 、 Cookie 、Content-Type 这些数据一个一个获取过来就可以,获取过来之后再想办法把它们拼接在一起。

3、获取用于支撑反爬虫识别的数据

(1)获取方法示例

先来获取用于支撑反爬虫识别的数据,那么这里需要的数据有哪些?比如像 Time-local 、 Cookie 都是要获取的,且需要一个一个来获取,那么怎么获取?

先举个例子,以 Time-loca 为例,这里面先定义一个局部的变量 local ,其中 time_local 是名称,通过ngx.var来获取 time_local 数据,获取完了之后,赋值给本地刚刚声明的time_local ,那么 time_local 就获取完了。

代码如下所示:

--获取Time_local

local time_local = ngx.var.time_local

获取完了以后,有可能获取的数据可能是无效的,所以需要做一个判断,既然是无效的,那就给 time_local 赋一个空值,然后就结束了,代码如下所示:

if time_local == nil then

time_local=“

End

(2)获取所有用于支撑反爬虫识别的数据代码

接下来还有很多需要获取的数据,一个一个来写,太耗费时间了,直接进行复制粘贴过来,

如下所示:

--获取用于支撑反爬虫识别的数据

local time_local = ngx.var.time_local

if time_local == nil then

time_local=“

end

local request = ngx.var.request

if request == nil then

request=“

end

local request_method = ngx.var.request_method

if request_method == nil then

request_method=“

end

local content_type = ngx.var.content_type

if content_type == nil then

content_type=“

end

local request_body = ngx.var.request_body

if request_body == nil then

request_body=“

end

local http_referer = ngx.var.http_referer

if http_referer == nil then

http_referer=“

end

local remote_addr = ngx.var.remote_addr

if remote_addr == nil then

remote_addr=“

end

local http_user_agent = ngx.var.http_user_agent

if http_user_agent == nil then

http_user_agent=“

end

local time_iso8601 = ngx.var.time_iso8601

if time_iso8601 == nil then

time_iso8601=“

end

local server_addr = ngx.var.server_addr

if server_addr == nil then

server_addr=“

end

local http_cookie = ngx.var.http_cookie

if http_cookie == nil then

http_cookie=“

End

 

二、将数据用“#CS#”进行拼接

将之前需要获取的数据都获取之后,数据很多,应如何全部打到 kafka 里面,而且最终只有一个 message ,所以需要用一个东西把这些字符串、数据都拼起来就可以了,即 message 就不再是12345-678910

把上面的数据一个一个粘过来,做一个添加,字符串连接是双等号,然后再加入一个分割符,加一个双等号,那么分隔符用什么?

什么都可以,在这个项目当中,用#中间加一个大写的CS ,用#CS#来进行分割。

如下所示:

--实例要打入 kafka 的数据

Local message=time_local..“#CS#..request..“#CS#..request_method..“#CS#..content_type..“#CS#..request_body..“#CS#..http_referer..“#CS#..remote_addr..“#CS#..http_user_agent..“#CS#..time_iso8601..“#CS#..server_addr..“#CS#..http_cookie;

这时 message 就采集完了,拼接完成之后数据就彻底准备好了,那数据就采集完了,也就能够打到 kafka 里了。


三、代码实现

现在验证一下,对上文写完的代码进行保存,保存好之后进入项目当中,输入 rm-rf 将之前的脚本删掉删掉以后将之前的脚本进行上传,上传完成之后重启 nginx 服务器,重启过后再回到 kafka 里面,这时再刷新界面时,它就不再是1-10了,是变成一串一串的,如下所示:

image.png

到目前为止,反爬虫项目数据采集阶段的大部分代码就写完了,以上就是发爬虫项目识别数据采集总体的一个脚本的书写过程。

 

四、总结

1、编写 Lua 采集数据并发送至 kafka 的脚本

(1) 导入依赖包

(2) 创建 kafka 生产者

(3) 创建数据的载体

(4) 发送数据

2、自定义分区数

(1)在 nginx 中设置共享内存

(2)在 lua 的脚本中取出共享内存,然后在内存中获取 count

(3)获取到 count 对 topicpartition 进行取余操作,确定分区

(4)将 count 进行自增操作

注:上述项目的代码如下所示:

--计算出数据的编号

--获取共享字典

local aharedData=ngx.shared.shared_data

--获取共享字典的数据

local dataCounts=sharedData;get(count)

--第一次获取数据有可能是空

if not dataCounts then

--若无数据便设置一个1

aharedData;get(count,)

--重新获取数据

dataCounts=aharedData;get(count)

end

--实例数据写入 kafka 分区的编号

local partitionNumber=tostring(dataCount&topicPartitions)

--数据编号自增

aharedData;incr(count,)

--在 web 输出

ngx.say(dataCounts :,dataCounts)

ngx.say(<br>)

ngx.say(partitionNumber :,partitionNumber)

3、收集数据到 kafka

(1) 采集 request 、 time_local 等支撑反爬虫项目的数据

(2) 将数据使用#CS#进行拼接

(3) 发送数据到 kafka

相关文章
|
11月前
|
消息中间件 存储 Cloud Native
云消息队列 Kafka 版 V3 系列荣获信通院“云原生技术创新标杆案例”
2024 年 12 月 24 日,由中国信息通信研究院(以下简称“中国信通院”)主办的“2025 中国信通院深度观察报告会:算力互联网分论坛”,在北京隆重召开。本次论坛以“算力互联网 新质生产力”为主题,全面展示中国信通院在算力互联网产业领域的研究、实践与业界共识,与产业先行者共同探索算力互联网产业未来发展的方向。会议公布了“2024 年度云原生与应用现代化标杆案例”评选结果,“云消息队列 Kafka 版 V3 系列”荣获“云原生技术创新标杆案例”。
356 89
|
分布式计算 监控 Hadoop
Hadoop任务执行失败
【7月更文挑战第12天】
650 10
|
数据采集 传感器 人工智能
|
弹性计算 虚拟化 异构计算
阿里云gpu云服务器最新收费标准与优惠价格表
租用阿里云gpu云服务器需要多少钱?不同时期阿里云服务器的租用价格不同,目前阿里云官方活动中主打的gpu云服务器是计算型gn6v、gn7i和gn6i云服务器,购买时长为1个月、6个月和1年自选,其中配置最低的计算型gn6i实例4核15G月付只要3368.00元/1个月起,年付为34221.00元/1年起,配置最高的计算型gn6i实例96核372G月付为19820.00元/1个月起,年付202164.00元/1年起。本文主要为大家介绍目前阿里云gpu云服务器最新收费标准与优惠价格表,以供大家参考和选择。
1585 0
阿里云gpu云服务器最新收费标准与优惠价格表
|
JSON 前端开发 JavaScript
【JavaWeb】Servlet详解
前面学习了Tomcat,它是一个Web服务器,提供Web程序处理服务端对请求的解析和对响应的封装,也就是请求的解析和响应的封装都不需要我们自己手动写程序来完成
【JavaWeb】Servlet详解
西门子S7-200 SMART整数运算指令概述及应用举例
本篇文章我们来学习西门子S7-200 SMART整数运算指令。S7-200 SMART的整数运算指令主要包括加、减、乘、除运算指令和递增、递减运算指令。
西门子S7-200 SMART整数运算指令概述及应用举例
|
缓存 安全 数据处理
windows操作系统的电脑越用越卡?简说几种原因和解决方法。
windows操作系统的电脑越用越卡?简说几种原因和解决方法。
|
机器学习/深度学习 搜索推荐 算法
【推荐系统】美团外卖推荐场景的深度位置交互网络DPIN的突破与畅想
美团基础研发机器学习平台训练引擎团队,联合到家搜推技术部算法效能团队、NVIDIA DevTech团队,成立了联合项目组。目前在美团外卖推荐场景中进行了部署,多代模型全面对齐算法的离线效果,对比之前,优化后的CPU任务,性价比提升了2~4倍。
842 0
【推荐系统】美团外卖推荐场景的深度位置交互网络DPIN的突破与畅想
|
机器学习/深度学习 弹性计算 虚拟化
阿里云服务器ECS通用型g5和g6有什么区别?应该如何选择?
阿里云在官方活动中,对于通用型实例的云服务器ECS,主要推荐的是g5和g6这两个实例,那么阿里云服务器ECS通用型g6和通用型g5实例有什么区别?我们又该如何选择呢?本文来说说通用型g6和通用型g5的区别以及选择方法:
892 0
阿里云服务器ECS通用型g5和g6有什么区别?应该如何选择?
|
SQL 运维 数据可视化
SLS 基于访问日志实现用户画像
阿里云 SLS 是云上一站式大数据处理、分析平台,其目标是“让用户专注在数据价值上,把数据系统部署、运维、扩容的工作交给 SLS”
2710 0
SLS 基于访问日志实现用户画像