当前位置:AIGC资讯 > 数据采集 > 正文

1+x 2020年数据采集证书(中级)实操试卷一

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.csv

1)代码文件: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分

更新时间 2023-11-08