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

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

开发者学堂课程【大数据实战项目:反爬虫系统(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

相关文章
|
1月前
|
数据采集 存储 Python
3.2 数据采集
本节采用Python进行网页数据抓取,利用其强大的配置与字符处理能力,以及丰富的网络模块,高效地采集了指定网站的前50页手机销售数据及10款手机的售后详情。通过使用requests库完成HTTP请求设定,并结合XPath进行精准的页面解析,提取关键信息如店铺名、手机品牌、型号参数等,最后将这些数据保存为CSV格式以供后续分析使用。
40 6
|
消息中间件 数据采集 SQL
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
|
5月前
|
数据采集 传感器 存储
数据采集
【6月更文挑战第16天】数据采集。
95 12
|
5月前
|
数据采集 消息中间件 存储
数据采集方法
【6月更文挑战第21天】数据采集方法。
104 3
|
数据采集 消息中间件 关系型数据库
数据采集(二)
数据采集(二)
220 0
|
数据采集 存储 人工智能
数据采集(一)
数据采集(一)
105 0
|
消息中间件 JSON 前端开发
大数据采集系统搭建
大数据采集系统搭建
144 0
|
数据采集 消息中间件 监控
大数据数据采集的数据采集(收集/聚合)的Logstash之数据采集流程的input
在大数据领域,数据采集是非常重要的一环。而Logstash作为一个开源的数据收集引擎,可以帮助我们轻松地实现数据的采集、聚合和传输等功能。本文将会对Logstash之数据采集流程的Input进行详细介绍。
129 1
|
数据采集 JSON 大数据
大数据数据采集的数据采集(收集/聚合)的Logstash之数据采集流程的filter
在大数据领域中,Logstash是一款非常流行的数据采集工具。它可以从各种不同的来源收集和聚合数据,并将其转换成统一格式进行处理。而在Logstash的数据采集过程中,Filter是一个非常重要的环节,可以对数据进行过滤、裁剪、重组等操作。本文将分享如何使用Logstash的Filter功能,来优化数据采集流程。
118 1
|
数据采集 Java 大数据
大数据数据采集的数据采集(收集/聚合)的Logstash之强大的插件功能
在大数据领域中,Logstash是一款非常流行的数据采集工具。它具有丰富的插件功能,可以完成各种不同数据来源的数据采集任务。本文将介绍Logstash的插件功能,并为大家介绍几款强大的插件。
182 1