827 views
python爬虫

Python爬取IBM硬件状态

文章目录

安装需要的模块

python2与python3urllib对照表

当前环境为:python2
如果需要使用python3,只需将相关urllib和urllib2使用的库全部改成urllib
参照上面的python2与python3urllib对照表

创建一个IBM_status.py文件

#!/usr/bin/env python
#coding:utf8
#++++++++++++description++++++++++++#
"""
@python2.7.5
@author:ying
@contact:1074020480@qq.com
@site: 
@software: PyCharm
@file: IBM_status.py
@time: 2019/9/17 上午8:44
"""
#python3 使用的库写法
#import urllib.request
#import urllib.parse
#import http.cookiejar
#import ssl, json,threading
#+++++++++++++++++++++++++++++++++++#
import urllib2,urllib
import http.cookiejar
import ssl, json


class IBM_IMM(object):
    def __init__(self, ip_list):
        self.ip_list=ip_list

    def get_status(self,ip):
        # 跳过ssl验证
        ssl._create_default_https_context = ssl._create_unverified_context
        # 实例化cookie
        cj = http.cookiejar.CookieJar()
        # 保存cookie
        handler = urllib2.HTTPCookieProcessor(cj)
        # 打开网页方式
        opener = urllib2.build_opener(handler)
        # url
        url = 'https://{0}/data/login'.format(ip)
        # 请求头信息
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
            'Referer': 'https://{0}/designs/imm/index.php'.format(ip)
        }
        # 表单数据,IBM服务器IMM管理口默认用户名密码
        formdata = {
            'user': 'USERID',
            'password': 'PASSW0RD',
            'SessionTimeout': '1200',
        }

        formdata = urllib.urlencode(formdata).encode()
        request = urllib2.Request(url=url, headers=headers)
        response = opener.open(request, data=formdata)
        # 登录成功后返回的数据内容{}
        token = json.loads(response.read())

        # 第二次请求的头信息,token非常重要,而且每次登录都会变化
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
            'X-Requested-With': 'XMLHttpRequest',
            'Referer': 'https://{0}/designs/imm/index-console.php'.format(ip),
            token['token2_name']: token['token2_value']
        }

        # 新url
        geturl = 'https://{0}/designs/imm/dataproviders/imm_status_hardware.php'.format(ip)

        new_request = urllib2.Request(url=geturl, headers=headers)
        response = opener.open(new_request)
        res=response.read().decode()
        #格式化数据
        js=json.loads(res)
        js[ip]=js.pop('items')
        return js

    def return_res(self):
        #数据再加工
        list1 = []
        for ip in self.ip_list:
            res = self.get_status(ip=ip)
            list1.append(res)
        dict1 = {}
        for i in list1:
            dict2 = {}
            for j, k in i.items():
                for l in k[0]['hardware_health']:
                    name = l['type']
                    status = l['status']
                    dict2[name] = status
                    dict1[j] = dict2
        #返回一个字典            
        return dict1


运行该文件(参考)

ip_list = ['192.168.127.72','192.168.127.71']#IMM接口的IP
imm=IBM_IMM(ip_list=ip_list)
res_list=imm.return_res()
print(res_list)
#------------------------------------------------#
#字典样式如下:
ll={
    '192.168.127.71': {
        u'Processors': u'Normal',
        u'Disks': u'Normal',
        u'System': u'Warning',
        u'Memory': u'Normal',
        u'PowerModules': u'Normal',
        u'CoolingDevices': u'Normal',
        u'Adapters': u'Normal'
    },
    '192.168.127.72': {
        u'Processors': u'Normal',
        u'Disks': u'Normal',
        u'System': u'Warning',
        u'Memory': u'Normal',
        u'PowerModules': u'Normal',
        u'CoolingDevices': u'Normal',
        u'Adapters': u'Normal'
     }
}

 for i,j in ll.items():
     # print i,j
     for k,l in j.items():
         print i,'---->',k,l
影子专属博客 赣ICP备17013143号