1. 首页
  2. 编程学习

Python脚本之CNVD按编号查详情

闲得无聊,我只能继续重复造轮子度日了。

参数说明:

python cnvd.py -n 编号1,编号2

运行截图

Python脚本之CNVD按编号查详情

Python脚本之CNVD按编号查详情

上脚本。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author:Y4er

import requests
import argparse
import progressbar
import prettytable as pt
from bs4 import BeautifulSoup

headers = {
	'Referer': 'http://www.cnvd.org.cn/flaw/list.htm',
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}

# 一个编号处理方法
def one(number):
	url = 'http://www.cnvd.org.cn/flaw/show/' + number
	tb = getinfo(url,number)
	print(tb)
	
# 多个编号
def many(nums):
	tbs = []
	p = progressbar.ProgressBar()
	for number in p(nums):
		url = 'http://www.cnvd.org.cn/flaw/show/' + number
		tb = getinfo(url,number)
		tbs.append(tb)
	for tb in tbs:
		print(tb)

# 获取表格
def getinfo(url,number):
	tb = pt.PrettyTable(["title","value"])
	# 获取源码
	r = requests.get(url,headers=headers).text
	soup = BeautifulSoup(r,'html.parser')
	# 获取数据	
	trs = soup.findAll(name="tr")[:13]
	for idx,tr in enumerate(trs):
		# print(idx,tr.get_text())
		tds = tr.findAll(name="td")
		title = tds[0].get_text().strip()
		value = tds[1].get_text().strip().replace('\r','').replace('\t','').replace('\n','')
		if len(value)>=60:
			value = value[:60] + '...'
		tb.add_row([title,value])
	return tb


if __name__ == '__main__':
	# 命令行参数
	parser = argparse.ArgumentParser()
	parser.add_argument('-n',dest='number',help='input your cnvd number',required=True) 
	args = parser.parse_args()
	if args.number==None:
		print(args.print_help)
	# 切片 判断是一个编号还是多个
	nums = args.number.split(',')
	if len(nums) == 1:
		one(nums[0])
	else:
		many(nums)

GitHub

原创文章,作者:Y4er,未经授权禁止转载!如若转载,请联系作者:Y4er

联系我们

在线咨询:点击这里给我发消息

QR code