1+x 2020年数据采集证书(中级)实操试卷一
采集工具运用题
#一、数据采集任务场景一(工具定制题) 使用 apache httpd、filebeat、logstash、csv完成数据采集演示。 ## 1、数据场景: ### apache httpd: 运行目录:/app/httpd/ ### filebeat 安装路径:/bigData/tools/filebeat/ 配置文件:/bigData/tools/filebeat/filebeat.yml ### logstash 安装路径:/bigData/tools/logstash/ 配置文件:/bigData/tools/logstash/config/logstash-filebeat-csv.conf
题目要求:
## 2、采集要求 1)apache httpd的配置文件修改 1.1)找到apache httpd配置文件 1.2)根据apache httpd配置文件找到access日志文件。 1.3)修改apache httpd配置文件中的apache端口为8097,然后重启apache。 1.4)通过火狐浏览器直接访问apache服务,产生新的日志数据。 2)在filebeat里配置采集的apache httpd的access日志文件路径 3)使用采集工具(filebeat)收集apache httpd的access日志数据 4)通过filebeat输出到logstash,在logstash里收集信息,通讯端口是5044。 5)通过logstash使用 HTTPD_COMMONLOG 正则规则拆分日志数据。 6)通过logstash输出到csv文件中(/home/output/httpd-outfile.csv)。 7)httpd-outfile.csv内容说明:包含"timestamp" ,"verb", "httpversion"这三个属性信息,用4个空格分隔。 ## 3、提交的内容 1)filebeat的配置文件 2)logstash的配置文件 3)csv结果文件
1)filebeat的配置文件
filebeat.inputs:
- type: log
# to do
enabled: true
# to do
paths:
- /app/httpd/logs/access_log
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
setup.kibana:
output.logstash:
# to do The Logstash hosts
hosts: ["localhost:5044"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
评分标准
2)logstash的配置文件
# Sample Logstash configuration for creating a simple# Beats -> Logstash -> Elasticsearch pipeline.
input { # to do
beats {
port => 5044
}}filter { # to do
grok {
match => { "message" => "%{HTTPD_COMMONLOG}" }
}}output {
csv {
path => "/home/output/httpd-outfile.csv"
fields => ["timestamp" ,"verb", "httpversion"]
csv_options => {"col_sep" => " "}
}
stdout{
codec => rubydebug #格式化
}
}
评分标准
25分
3)csv结果文件
"27/Jul/2020:15:52:47 +0800" GET 1.1
评分标准
采集结果:15 分. 采集结果文件中至少包含一条数据。数据内容参考如下: "27/Jul/2020:15:30:47 +0800" GET 1.1 这一条数据中的三个数据项值分别是5分。 第一个数据是时间,时间要包含 27/Jul/2020 这个关键数据。 第二个数据是请求方法值。可以是GET、POST、PUT、DELETE等其中一个。 第三个数据是HTTP版本号。值可以是 1.1 。
编程题
题目说明:
# 一、数据采集任务场景一(编程开发) ## 1、数据场景: ### 采集网站 http://117.73.11.244:9090/ ### chrome浏览器启动 启动chrome:/opt/google/chrome/google-chrome --no-sandbox ### python开发工具启动 启动pycharm:/home/pycharm-community-2020.1.1/bin/pycharm.sh ### 工程目录说明 工程目录是:/root/PycharmProjects/crawler ### 编程文件 代码文件路径: /root/PycharmProjects/crawler/src/webcrawler.py
题目要求:
采集要求 1)使用python采集一个指定网站的首页。 2) 对获取到的响应网页内容进行冗余数据剔除。 2.1)使用正则去掉网页中的<script>元素及其包含的内容。 2.2)使用正则去掉网页中的<style>元素及其包含的内容。 3)采集目标:对于id值是"head_nav_list"的<ul>元素,获取其所有子元素<li>里的下级元素<a>中的href属性值 4)将结果存放到csv格式的文件里。结果文件路径:/home/output/crawler_result.csv 5)结果文件的要求:每一行存放 一个 href 值。 6)必须要有异常捕捉处理。 ## 3、提交的内容 1)代码文件:webcrawler.py 2)采集结果:crawler_result.csv1)代码文件:webcrawler.py
#!/usr/bin/env python# -*- coding: utf-8 -*-
import time
import urllib, time, os, base64, json
import re, sys
import urllib
from lxml import etree
import requests #对获取到的响应网页内容进行冗余数据剔除。
def getPage(base_url):
try:
page = urllib.request.urlopen(base_url) # 5
content = page.read().decode("utf-8", "ignore").lower()
re_script=re.compile('<\s*script[\S\s]*<\s*/\s*script\s*>',re.I) #Script [\\S\\s]+?使用正则去掉网页中的<script>元素及其包含的内容。
re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',re.I) #style使用正则去掉网页中的<style>元素及其包含的内容。
content=re_script.sub('',content) #去掉SCRIPT
content=re_style.sub('',content)#去掉style
selector = etree.HTML(content.encode("utf-8",'ignore'))
# answer one
# menu_items = selector.xpath("/html/body/header/div/ul[@id='head_nav_list']/li/a") # 5
# for item in menu_items:
# writefile("/home/output/crawler_result.csv", item.attrib.get("href")) # 2
# answer two
menu_items = selector.xpath("/html/body/header/div/ul[@id='head_nav_list']/li/a/@href") # 5
for item in menu_items:
writefile("/home/output/crawler_result.csv", item) # 2
except Exception as e: # 3
print("Failed to read from %s." % base_url)
print(sys.exc_info())
return False
def writefile(filename, content):
try:
fp = open(filename, 'a') # 5
fp.write(content + "\n") # 5
fp.close() # 5
except:
return False
now = time.strftime('%Y-%m-%d %X', time.localtime(time.time()))
try:
# 5
url = 'http://117.73.9.229:9090/'
getPage(url)
except Exception as e:
info = '%s\nError: %s' % (now, e)
writefile('Error.log', info)
print (info)
time.sleep(1)
评分标准
35分
2)采集结果:crawler_result.csv
/
http://www.inspuredu.com/sysConfigItem/showList
http://www.inspuredu.com/classPackage/findAll
http://www.moe.gov.cn/jyb_xwfb/s271/201904/t20190416_378207.html
http://www.inspuredu.com/sysNews/list.html
http://www.inspuredu.com/tikuIndex/toIndex
http://www.inspuredu.com/question/comQuestionIndex
评分标准
15分