精华内容
下载资源
问答
  • 爬虫监控

    2016-04-25 02:36:00
    http://www.codesec.net/view/166971.html  
    展开全文
  • 可视化爬虫监控系统

    千次阅读 2019-01-31 11:17:36
    当你部署很多爬虫以后你就需要一个可视化的爬虫监控系统。来方便查看每个爬虫的入库数据和工作状态等… 本文就手把手一步步教你如何搭建这样一个可视化监控系统。本文不讲解爬虫的相关技术实现,而是从实用性的角度...

    1. 需求说明

    当你部署很多爬虫以后你就需要一个可视化的爬虫监控系统。来方便查看每个爬虫的入库数据和工作状态等… 本文就手把手一步步教你如何搭建这样一个可视化监控系统。本文不讲解爬虫的相关技术实现,而是从实用性的角度,将抓取并存入 MongoDB 的数据 用 InfluxDB 进行处理,而后又通过 Grafana 将爬虫抓取数据情况通过酷炫的图形化界面展示出来。

    Grafana 和 InfluxDB是什么?
    • Grafana:是一个开源的分析和监控系统,拥有精美的web UI,支持多种图表,可以展示influxdb中存储的数据,并且有报警的功能。
    • InfluxDB:是一款开源的时间序列数据库,专门用来存储和时间相关的数据(比如我用它存储某个时间点爬虫抓取信息的数量)
    最终的实现效果

    在这里插入图片描述
    请注意以下操作,都是 Mac 下实现的。但是原理是相似的,你可以在自己的 PC 上进行试验。

    2. 安装配置 InfluxDB

    安装 InfluxDB

    brew update
    brew install influxdb
    

    修改配置文件/usr/local/etc/influxdb.conf,如果原文件中没有对应配置项,需自己添加。

    [data]
      # 将存储 TSM 文件的路径,修改成自己的目录。
      dir = "/usr/local/var/influxdb/data"     
    # 将存储 WAL 文件的路径,修改成自己的目录。
      wal-dir = "/usr/local/var/influxdb/wal"  
    
    [admin]
      # 设定 admin 管理界面的 host 和 port 
      bind-address='127.0.0.1:8083'
    
    [http]
      # 修改 API 的 host 和 port
      bind-address = ":8086"
    

    3. 安装配置 Grafana

    安装 Grafana

    brew update
    brew install grafana
    

    并修改 Grafana 配置文件 /usr/local/etc/grafana/grafana.ini,内容如下:

    [data]
      # 将存储 TSM 文件的路径,修改成自己的目录。
      dir = "/usr/local/var/influxdb/data"     
    # 将存储 WAL 文件的路径,修改成自己的目录。
      wal-dir = "/usr/local/var/influxdb/wal"  
    
    [admin]
      # 设定 admin 管理界面的 host 和 port 
      bind-address='127.0.0.1:8083'
    
    [http]
      # 修改 API 的 host 和 port
      bind-address = ":8086"
    

    4. 爬虫代码

    由于这里主是要介绍如何将 Grafana 和 InfluxDB 与爬虫进行结合的方案,而不是主讲爬虫原理,而且代码也比较多,影响可读性,所以就不贴出爬取的代码。
    https://github.com/al2ln44edr/spider_visualize_monitor_grafana_influxdb_mongdb

    5.监控脚本

    考虑到可能要增加爬虫到监控中,因此这里使用了热更新对监控进行动态配置。
    配置文件 influx_settings.conf 主要用于热更新相关设置。

    # [需要监控的 MongoDB 数据的 数据库名 和 集合名]
    [db]
    db_collection_dict = {
        'learn_selenium_doubandianying': 'movie_info',
        }
    
    # [设置循环间隔时间]
    [time]
    interval = 15
    

    如何动态读取这个配置文件的设置呢?需要写一个脚本来监控。代码如下:

    import ast
    import time
    import pymongo
    import traceback
    from configparser import ConfigParser
    from influxdb import InfluxDBClient
    from datetime import datetime
    from os.path import getmtime
    
    # 配置 influxdb
    client = InfluxDBClient(host='localhost', port=8086) # influxdb默认端口为8086
    
    # 创建 database
    client.create_database('Spider')
    # switch 到 database
    client.switch_database('Spider')
    
    # 设定配置文件
    config_name = 'influx_settings.conf'
    
    WATCHED_FILES = [config_name]
    WATCHED_FILES_MTIMES = [(f, getmtime(f)) for f in WATCHED_FILES]  
    
    _count_dict = {}
    _size_dict = {}
    
    # 获取配置文件中的设置
    def parse_config(file_name):
        try:
            # 创建一个配置文件对象
            cf = ConfigParser() 
            # 打开配置文件
            cf.read(file_name)
            # 获取配置文件中的统计频率
            interval = cf.getint('time', 'interval')
            # 获取配置文件中要监控的 dbs 和 collection
            dbs_and_collections = ast.literal_eval(cf.get('db', 'db_collection_dict'))
            return interval, dbs_and_collections
    
        except:
            print(traceback.print_exc())
            return None
    
    
    # 从 MongoDB 获取数据,并写入 InfluxDB
    def insert_data(dbs_and_collections):
    
        # 连接 MongoDB 数据库
        mongodb_client = pymongo.MongoClient(host='127.0.0.1',port=27017)  # 直接使用默认地址端口连接 MongoDB
    
        for db_name, collection_name in dbs_and_collections.items():
    
            # 数据库操作,创建 collection 集合对象
            db = mongodb_client[db_name]
            collection = db[collection_name]
    
            # 获取 collection 集合大小
            collection_size = round(float(db.command("collstats", collection_name).get('size')) / 1024 / 1024, 2)
    
            # 获取 collection 集合内数据条数
            current_count = collection.count()
    
            # 初始化数据条数,当程序刚执行时,条数初始量就设置为第一次执行时获取的数据
            init_count = _count_dict.get(collection_name, current_count)
            # 初始化数据大小,当程序刚执行时,大小初始量就设置为第一次执行时获取的数据大小
            init_size = _size_dict.get(collection_name, collection_size)
    
            # 得到数据条数增长量
            increase_amount = current_count - init_count        
            # 得到数据大小增长量
            increase_collection_size = collection_size - init_size
    
            # 得到当前时间
            current_time = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
    
            # 赋值
            _count_dict[collection_name] = current_count
            _size_dict[collection_name] = collection_size
    
            # 构建
            json_body = [
                {
                    "measurement": "crawler",
                    "time": current_time,
                    "tags": {
                        "spider_name": collection_name
                    },
                    "fields": {
                        "count": current_count,
                        "increase_count": increase_amount,
                        "size": collection_size,
                        "increase_size": increase_collection_size
    
                    }
                }
            ]
            # 将获取
            if client.write_points(json_body):
                print('成功写入influxdb!',json_body)
    
    
    def main():
        # 获取配置文件中的监控频率和MongoDB数据库设置
        interval, dbs_and_collexctions = parse_config(config_name)
    
        # 如果配置有问题则报错
        if (interval or dbs_and_collexctions) is None:
            raise ValueError('配置有问题,请打开配置文件重新设置!')
    
        print('设置监控频率:', interval)
        print('设置要监控的MongoDB数据库和集合:', dbs_and_collexctions)
    
        last_interval = interval
        last_dbs_and_collexctions = dbs_and_collexctions
    
        # 这里实现配置文件热更新
        for f, mtime in WATCHED_FILES_MTIMES:
            while True:
                # 检查配置更新情况,如果文件有被修改,则重新获取配置内容
                if getmtime(f) != mtime:
                    # 获取配置信息
                    interval, dbs_and_collections = parse_config(config_name)
                    print('提示:配置文件于 %s 更新!' % (time.strftime("%Y-%m-%d %H:%M:%S")))
    
                    # 如果配置有问题,则使用上一次的配置
                    if (interval or dbs_and_collexctions) is None:
                        interval = last_interval
                        dbs_and_collexctions = last_dbs_and_collexctions
    
                    else:
                        print('使用新配置!')
                        print('新配置内容:', interval, dbs_and_collexctions)
                        mtime = getmtime(f)
    
                # 写入 influxdb 数据库
                insert_data(dbs_and_collexctions)
    
                # 使用 sleep 设置每次写入的时间间隔
                time.sleep(interval)
    
    if __name__ == '__main__':
        main()
    

    来试着运行一下

    python3 influx_monitor.py 
    

    运行,得到下图内容,表示监控脚本运行成功。
    在这里插入图片描述
    另建窗口,修改配置文件 influx_settings.conf

    # 修改间隔时间为8秒
    interval = 8
    

    切换至第一次运行 influxDB 的窗口,会提示配置更新,说明配置热更新生效。

    在这里插入图片描述

    6. 配置 Grafana

    首先打开 Chrome 浏览器,输入 http://127.0.0.1:3000 登录 grafana 页面。

    连接本地 influxDB 数据库,操作如下图。
    在红色方框内选择 Type 类型为 InfluxDB,并输入URL:http://localhost:8086

    在这里插入图片描述
    在这里插入图片描述新建 dashboard

    在这里插入图片描述
    修改 dashboard 设置

    在这里插入图片描述
    在这里插入图片描述
    设置监控的数据对象

    在监控脚本中,写入influxDB的代码如下,其中 “measurement” 对应 表名,“fields” 对应写入的字段;

    "measurement": "crawler",
                    "fields": {
                        "count": current_count,
                        "increase_count": increase_amount,
                        "size": collection_size,
                        "increase_size": increase_collection_size
       }
    

    7. 运行爬虫文件

    启动 MongoDB 数据库服务。
    brew services mongodb start
    新建一个 terminal 窗口,运行爬虫文件。
    在这里插入图片描述
    我们可以在刚刚打开的控制台里查看效果展示:

    在这里插入图片描述
    -----------------------------------------------------------end------------------------------------------------------
    感谢观看~~~~~~~~~~~~~提前祝大家新年快乐~~~~~~~~~~~~~

    展开全文
  • 电商数据爬虫监控

    2021-06-23 16:27:23
    目前我们公司开展了数据爬虫监控的模块,可以长期的去爬取网站的数据,由于已经是开发完善的,不需要支付额外的工具开发费用,如近期有需要长期网站数据,可以了解一下 了解更多分析及数据抓取可查看: ...

    目前我们公司开展了数据爬虫监控的模块,可以长期的去爬取网站的数据,由于已经是开发完善的,不需要支付额外的工具开发费用,如近期有需要长期网站数据,可以了解一下在这里插入图片描述
    了解更多分析及数据抓取可查看:
    http://cloud.yisurvey.com:9081/html/bfd0c1a1-ea90-4ed6-9a2c-1da4cd72391c.html

    展开全文
  • zabbix使用爬虫监控ibmv3700存储设备

    千次阅读 2019-12-21 12:31:39
    zabbix使用爬虫监控ibmv3700存储设备 背景介绍 对于中小型企业来讲,zabbix是一款非常优秀的监控工具。最近,想要用它来监控存储设备。对于一般的硬件(交换机、服务器、存储)设备,可以通过IPMI、SNMP的方式获取...

    zabbix使用爬虫监控ibmv3700存储设备

    背景介绍

    对于中小型企业来讲,zabbix是一款非常优秀的监控工具。最近,想要用它来监控存储设备。对于一般的硬件(交换机、服务器、存储)设备,可以通过IPMI、SNMP的方式获取监控数据。尤其是SNMP,很多产品都会提供对应接口,很方便的就可以获取到监控数据,很多常用设备的监控模板,网上的高手都已经写好了,我们将模板下载下来,导入即可使用。但是,总有一些“奇葩”的产品。比如我们公司使用的IBM V3700,这种设备在SNMP层面,只支持snmp trap(设备产生告警信息,由设备自身将告警信息发送给服务端。),无法通过snmp get/walk的方式获取到监控数据。

    在网上看到人针对zabbix 4.0写的监控IBM V3700的方案。地址“https://share.zabbix.com/storage-devices/ibm/ibm-storwize-v3700”。看了他的python脚本,老夫大受启发。**他的原理是通过ssh的方式登录到存储设备上,执行命令,然后将命令的返回值格式化后,通过zabbix采集器,将监控数据上报给zabbix。目前,我最想监控的是存储上的硬盘的状态,如果硬盘出现故障,希望其触发告警。**可是我对存储的命令不熟悉,查了一下官方文档,简单的看了一下,并没有看到和硬盘状态相关的信息。

    好在这种大多数硬件设备,通过http协议,提供了一个管理接口。管理员登录后,可以查看到硬盘的状态。然后就想到 通过爬虫的方式,获取硬盘状态数据,然后将数据格式化后,通过zabbix采集器,发送给zabbix server。 此处只是演示大致的逻辑,爬虫通过shell来实现。

    在这里插入图片描述

    实现原理

    1. 定义监控模板。
    • 最关键的监控项是ibm_3700_collection,键值是ibm_3700_get_store_status.sh["{$STORAGE_IP}","{$USERNAME}","{$PASSWORD}"]
    • 因为存储上面的硬盘数量会调整,所以定义一个自动发现规则
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    1. 创建主机,并关联模板。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    2. 脚本名称是ibm_3700_get_store_status.sh,注意脚本的权限,要保证zabbix进程的用户拥有执行权限。将脚本放到zabbix服务端的zabbix/share/zabbix/externalscripts目录下。

    3. 执行脚本后,脚本会爬取监控数据,将数据保存在server主机的/tmp目录下,生成三个临时文件。并将数据上报到zabbix server。
      在这里插入图片描述

    脚本内容

    1. 监控脚本:ibm_3700_get_store_status.sh
    [root@zabbixser externalscripts]# cat ibm_3700_get_store_status.sh 
    #!/bin/bash
    
    export LANG=en_CN.UTF-8
    STORAGE_IP=$1
    USERNAME=$2
    PASSWORD=$3
    
    get_jsessionid () {
        local url="https://${STORAGE_IP}"
        jsessionid=$(curl -k -I ${url} 2> /dev/null| awk '/JSESSIONID/{print $2}' | cut -d ';' -f 1)
        if [[ ! ${jsessionid} ]];then
            echo "${url} failed."
            exit 1
        fi
    }
    
    get_auth () {
        local url="https://${STORAGE_IP}/login"
        local data="login=${USERNAME}&password=${PASSWORD}"
        get_jsessionid
        _auth=$(curl -b ${jsessionid} -d ${data} -k ${url}  -i 2> /dev/null | awk '/auth/{print $2}' | cut -d ';' -f 1)
        if [[ ! ${_auth} ]];then
            echo "user,password error."
            exit 1
        fi
    }
    
    get_device () {
        local url="https://${STORAGE_IP}/RPCAdapter"
        timestame=$(date -d "-8 hour" +%FT%H:%M:%S)
        local data='{"clazz":"com.ibm.evo.rpc.RPCRequest","methodClazz":"com.ibm.svc.gui.logic.PhysicalRPC","methodName":"getInternalDriveInfo","methodArgs":[],"guiUsage":[{"timestamp":"'${timestame}'.088Z","event":"Fisheye Navigation Clicked","details":{"fisheyeNavLevel":2,"fisheyeNavLabel":"内部存储器"},"eventType":"fisheyeNavClick"}]}'
        
        curl -b ${jsessionid} -b ${_auth} -d "${data}" -k ${url} -o /tmp/ibm_3700_${STORAGE_IP}.tmp 2> /dev/null
        [[ $? == 0 ]] || exit 1
    }
    
    get_value_uid () {
        TMPFILE="/tmp/ibm_3700_${STORAGE_IP}.tmp"
        VALUEFILE="/tmp/ibm_3700_discovery${STORAGE_IP}.tmp"
        STORAGE_JSON='{"data": ['
        JSON_LENGTH=$(cat ${TMPFILE} | jq '.result.drives | length')
        let JSON_LENGTH=${JSON_LENGTH}-1
    
        for ID in $(seq 0 ${JSON_LENGTH});do
            NAME=$(cat ${TMPFILE} | jq ".result.drives | .[${ID}].uid")
            ID_NAME='{"{#ID}": "'${ID}
            ID_NAME=${ID_NAME}'","{#NAME}": '${NAME}
            ID_NAME=${ID_NAME}'}'
            STORAGE_JSON=$(echo -n "${STORAGE_JSON}${ID_NAME}")
            if [[ ${ID} != ${JSON_LENGTH} ]];then
                STORAGE_JSON=$(echo -n "${STORAGE_JSON},")
            fi
        done
        STORAGE_JSON=$(echo -n "${STORAGE_JSON}]}")
        echo -n "${STORAGE_IP} " > ${VALUEFILE}
        echo -n "diskuid " >> ${VALUEFILE}
        echo ${STORAGE_JSON} >> ${VALUEFILE}
        
        /data/zabbix/bin/zabbix_sender -z 127.0.0.1 -i ${VALUEFILE} > /dev/null
        echo 1
        sleep 2
    
        VALUEFILE="/tmp/ibm_3700_value${STORAGE_IP}.tmp"
        > ${VALUEFILE}
        for ID in $(seq 0 ${JSON_LENGTH});do
            STORAGE_STATUS=$(cat ${TMPFILE} | jq ".result.drives | .[${ID}].status")
            echo -n "${STORAGE_IP} " >> ${VALUEFILE}
            echo -n "ibm_3700_get_status_[${ID}] " >> ${VALUEFILE}
            echo ${STORAGE_STATUS} >> ${VALUEFILE}
        done
        for ID in $(seq 0 ${JSON_LENGTH});do
            PORT1_STATUS=$(cat ${TMPFILE} | jq ".result.drives | .[${ID}].port1Status")
            echo -n "${STORAGE_IP} " >> ${VALUEFILE}
            echo -n "ibm_3700_get_port1Status_[${ID}] " >> ${VALUEFILE}
            echo ${STORAGE_STATUS} >> ${VALUEFILE}
        done
        for ID in $(seq 0 ${JSON_LENGTH});do
            PORT1_STATUS=$(cat ${TMPFILE} | jq ".result.drives | .[${ID}].port2Status")
            echo -n "${STORAGE_IP} " >> ${VALUEFILE}
            echo -n "ibm_3700_get_port2Status_[${ID}] " >> ${VALUEFILE}
            echo ${STORAGE_STATUS} >> ${VALUEFILE}
        done
        /data/zabbix/bin/zabbix_sender -z 127.0.0.1 -i ${VALUEFILE} > /dev/null
    }
    
    get_auth
    get_device
    get_value_uid
    
    1. 爬取的临时文件:ibm_3700_192.168.40.4.tmp
          {
            "clazz": "com.ibm.svc.devicelayer.api.output.TBirdDriveWithClassBean",
            "driveClass": "io_grp0-XXXXXXXXXXXXXXXXXXXXXXX",
            "id": 6,
            "errorSequenceNumber": null,
            "uid": "XXXXXXXXXXXX",
            "capacity": 899647799296,
            "blockSize": 512,
            "vendorId": "IBM-A040",
            "productId": "XXXXXXXXX     ",
            "fruPartNumber": "XXXXXX",
            "fruIdentity": "XXXXXXXXXXXXXXXXX",
            "rpm": 10000,
            "firmwareLevel": "B56M",
            "fpgaLevel": "",
            "mdiskId": 0,
            "mdiskName": "mdisk0",
            "memberId": 6,
            "enclosureId": 1,
            "slotId": 7,
            "nodeId": null,
            "nodeName": "",
            "quorumId": null,
            "wasSpare": false,
            "encrypted": false,
            "interfaceSpeed": "6Gb",
            "status": "online",
            "use": "member",
            "techType": "sas_hdd",
            "port1Status": "online",
            "port2Status": "online",
            "healthState": null,
            "autoManage": "inactive"
          }
    
    1. 自动发现的临时文件:ibm_3700_discovery192.168.40.4.tmp
    [root@zabbixser tmp]# cat ibm_3700_discovery192.168.40.4.tmp
    192.168.40.4 diskuid {"data": [{"{#ID}": "0","{#NAME}": "5000c5006b9d4f07"},{"{#ID}": "1","{#NAME}": "5000c5006bd4be6f"},{"{#ID}": "2","{#NAME}": "5000c5006b97b907"},{"{#ID}": "3","{#NAME}": "5000c5006b98e7af"},{"{#ID}": "4","{#NAME}": "5000c5006b9b8c7f"},{"{#ID}": "5","{#NAME}": "5000c5006bd21917"},{"{#ID}": "6","{#NAME}": "5000c5006b991e6b"}]}
    
    1. 监控数据的临时文件:ibm_3700_value192.168.40.4.tmp
    [root@zabbixser tmp]# cat ibm_3700_value192.168.40.4.tmp
    192.168.40.4 ibm_3700_get_status_[0] "online"
    192.168.40.4 ibm_3700_get_status_[1] "online"
    192.168.40.4 ibm_3700_get_status_[2] "online"
    192.168.40.4 ibm_3700_get_status_[3] "online"
    192.168.40.4 ibm_3700_get_status_[4] "online"
    192.168.40.4 ibm_3700_get_status_[5] "online"
    192.168.40.4 ibm_3700_get_status_[6] "online"
    192.168.40.4 ibm_3700_get_port1Status_[0] "online"
    192.168.40.4 ibm_3700_get_port1Status_[1] "online"
    192.168.40.4 ibm_3700_get_port1Status_[2] "online"
    192.168.40.4 ibm_3700_get_port1Status_[3] "online"
    192.168.40.4 ibm_3700_get_port1Status_[4] "online"
    192.168.40.4 ibm_3700_get_port1Status_[5] "online"
    192.168.40.4 ibm_3700_get_port1Status_[6] "online"
    192.168.40.4 ibm_3700_get_port2Status_[0] "online"
    192.168.40.4 ibm_3700_get_port2Status_[1] "online"
    192.168.40.4 ibm_3700_get_port2Status_[2] "online"
    192.168.40.4 ibm_3700_get_port2Status_[3] "online"
    192.168.40.4 ibm_3700_get_port2Status_[4] "online"
    192.168.40.4 ibm_3700_get_port2Status_[5] "online"
    192.168.40.4 ibm_3700_get_port2Status_[6] "online"
    

    注意事项:

    1. 由于脚本的执行时间不稳定,建议调整一下zaerver的timeout时间。
    2. 注意脚本的权限。
    3. 监控模板有很多可以优化的地方,比如将“online”转换成数字0/1、添加一个触发器等等。
    4. 很多硬件设备都提供了这种管理口,此处只提供思路。
    5. 因为密码存在暴露风险,最好创建一个普通用户,来实现监控。
      在这里插入图片描述
    展开全文
  • 友好界面的爬虫监控系统

    千次阅读 热门讨论 2017-11-03 17:25:41
    由于公司业务需要,我最近几天开发一套爬虫监控系统,技术体系:express(nodejs的web框架)+bootstrap(前端框架)+kibana(日志分析)+zabbix(服务器监控)+es(分布式搜索引擎)+logstash(日志收集)。...
  • 爬虫监控系统 思路: 数据源 nginx 获取客户端的请求 lua脚本收集nginx获取的请求的数据推送到kafka(ps:lua脚本在收集数据时采用’$CS#'进行拼接) 数据处理模块: 数据处理 数据切分:获取kafka的数据,按照’#...
  • Python爬虫监控简介

    千次阅读 2019-06-12 21:27:24
    一、监控的意义 爬虫脚本是基于网站的结构去写的,但是随着互联网的发展,很多公司的页面结构会发生...这就需要对爬虫的脚本进行监控监控的目的是让数据及时的更新,脚本及时的发现bug以及解决bug。提高我们的工...
  • 爬虫监控系统__Day01 简介 什么是爬虫? 爬虫能获取目的网页中的内容:例如商品的信息、编号、内容、介绍、图、链接(这是最基本的功能) 重要特性:往往是一次到位直接进入对应的页面,这与普通用户的操作不同 ...
  • Python爬虫监控(邮件和钉钉)

    千次阅读 2019-06-12 21:24:02
    文章目录一、监控的意义二、Python邮件监控(SMTP)1. SMTP简介2. 邮件监控五个步骤3. 邮件监控发送(代码)二、钉钉监控 一、监控的意义 爬虫脚本是基于网站的结构去写的,但是随着互联网的发展,很多公司的页面...
  • Node 爬虫监控京东商品到货,并实现下单服务
  • WebMagic之爬虫监控

    2018-08-15 22:18:00
    年前闲着无聊,研究了一阵子爬虫技术,接触到爬虫框架 WebMagic,感觉很好用。 在之后的工作中,接手了新站与第三方接口对接的工作,主要的工作是去抓取对方接口的内容;初始的时候,之前负责该工作的同事,是手动...
  • 这是一个网络爬虫框架,集数据收集,进度监控,数据存储,服务器资源监控为一体的应用框架 帮助文档在这啦! honstat.carwler项目仓库地址 功能介绍 代码架构介绍 转载于:...
  • 教你用python爬虫监控教务系统,查成绩快人一步! 这几天考了大大小小几门课,教务系统又没有成绩通知功能,为了急切想知道自己挂了多少门,于是我写下这个脚本。 设计思路: 设计思路很简单,首先对已有的成绩进行...
  • 原标题:用python打造可视化爬虫监控系统,酷炫的图形化界面本文并不是讲解爬虫的相关技术实现的,而是从实用性的角度,将抓取并存入 MongoDB 的数据 用 InfluxDB 进行处理,而后又通过 Grafana 将爬虫抓取数据情况...
  • WebMagic/JMX&爬虫监控

    千次阅读 2015-08-02 00:02:30
    WebMagic使用JMX实现了对爬虫监控,可以通过Jconsole等JMX工具查看本地或者远程的爬虫信息。 为爬虫添加监控: 获取一个SpiderMonitor的实例SpiderMonitor.instance(),并将要监控的Spider注册进去即可。可以...
  • 爬虫监控 爬虫监控给的由来: 爬虫监控相当于监控(自动)一个爬虫,由于爬虫可能会出现一些问题,页面结构的变化,加载方式的改变等,就会造成大量的数据为空。对于这种情况,如果有一个类似于监控的展示代码出错的...
  • windows部署SpiderKeeper(爬虫监控)

    千次阅读 热门讨论 2018-02-07 05:05:33
    博主部署SpiderKeeper环境是windows, 相信用Linux的同学部署...  如果想把监控部署在网络上,项目目录下scrapy.cfg中的url需要配置成0.0.0.0,设置完请重启scrapyd。   到这里已经结束啦,喜欢的朋友点个赞吧!
  • 教你实现一个可视化爬虫监控系统

    千次阅读 2019-05-09 10:12:18
    本文并不是讲解爬虫的相关技术实现的,而是从实用性的角度,将抓取并存入 MongoDB 的数据 用 InfluxDB 进行处理,而后又通过 Grafana 将爬虫抓取数据情况通过酷炫的图形化界面展示出来。 在开始之前,先对 Grafana ...
  • 原标题:用python打造可视化爬虫监控系统,酷炫的图形化界面本文并不是讲解爬虫的相关技术实现的,而是从实用性的角度,将抓取并存入 MongoDB 的数据 用 InfluxDB 进行处理,而后又通过 Grafana 将爬虫抓取数据情况...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,748
精华内容 7,899
关键字:

爬虫监控

爬虫 订阅