首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用文本文件创建列表,然后使用列表从网页中抓取创建字典

使用文本文件创建列表,然后使用列表从网页中抓取创建字典
EN

Stack Overflow用户
提问于 2022-04-04 12:55:32
回答 1查看 59关注 0票数 0

我有一个文本文件,其中有一个主机名列表:

代码语言:javascript
复制
router-1
firewall-1
firewall-2
distro-1

我想要做的是从这个文件创建一个列表,然后从这个列表中搜索一个特定的文本字符串来确定设备的device_platform。然后用它创建一个类似于这样的字典:

代码语言:javascript
复制
[
    {'hostname': 'router-1', 'device_platform': 'cisco_ios'},
    {'hostname': 'firewall-1', 'device_platform': 'juniper'},
    {'hostname': 'firewall-2', 'device_platform': 'cisco_asa'},
    {'hostname': 'distro-1', 'device_platform': 'broadcom_icos'}
]

到目前为止,这就是我所拥有的,网络抓取部分工作。我只需要知道如何添加一个部分来创建列表,然后从这个列表中抓取信息并返回到创建一个像上面这样的字典。

代码语言:javascript
复制
import requests
import urllib3


with open('devices.txt', 'r') as f:
    host = f.read().splitlines()
    print(host)
    for device in host:
        url = f'http://nunya.com/device/{device}.nunya.com/config'
        urllib3.disable_warnings()
        request = requests.get(url).text
        if 'event manager applet' in request and 'pager' not in request:
            device_platform = 'cisco_ios'
        elif 'junos' in request:
            device_platform = 'juniper'
        elif 'pager' in request:
            device_platform = 'cisco_asa'
        else:
            device_platform = 'broadcom_icos'
        print(f'hostname: {device}, device_platform: {device_platform}')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-04 13:08:02

我知道你最终想要的是这种形式,

代码语言:javascript
复制
[
    {'hostname': 'router-1', 'device_platform': 'cisco_ios'},
    {'hostname': 'firewall-1', 'device_platform': 'juniper'},
    {'hostname': 'firewall-2', 'device_platform': 'cisco_asa'},
    {'hostname': 'distro-1', 'device_platform': 'broadcom_icos'}
]

这是一个list of dictionaries,您的代码不需要太多的更改就可以得到它。

只需在list循环开始之前启动一个空的dictionaries,并在循环进行时继续向其追加所需的dictionaries。以下是代码:

代码语言:javascript
复制
import requests
import urllib3


with open('devices.txt', 'r') as f:
    host = f.read().splitlines()
    print(host)
    data = []
    for device in host:
        url = f'http://nunya.com/device/{device}.nunya.com/config'
        urllib3.disable_warnings()
        request = requests.get(url).text
        if 'event manager applet' in request and 'pager' not in request:
            device_platform = 'cisco_ios'
        elif 'junos' in request:
            device_platform = 'juniper'
        elif 'pager' in request:
            device_platform = 'cisco_asa'
        else:
            device_platform = 'broadcom_icos'
        data.append({'hostname': device, 'device_platform': device_platform})
        print(f'hostname: {device}, device_platform: {device_platform}')
    print(data)

正如您所看到的,我正在启动一个空的list,方法是data=[],在循环中,您可以看到我正在将dictionaries与所需的数据附加到行data.append({'hostname': device, 'device_platform': device_platform})中的列表中。

希望这对你有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71737621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档