#!/usr/bin/env python
# encoding: utf-8
#@author: jack
import random
from time import sleep
import pandas as pd
from openpyxl import load_workbook
from urllib import request
from lxml import etree wb = load_workbook('cve.xlsx')#要读取的excel文件名,用openpyxl考虑到wrxl库网友反馈对excel后面版本兼容不是太好
sheet = wb['Sheet1']#默认excel右下角表名称
cve_list =[]
for i in sheet["D"][1:25]:#第D列第一行开始读起到24结束
cve_code = i.value#读取到的每个列表参数
cve_list.append(cve_code)#前面定义的空列表来存放excel读取的数据
start_url = 'https://nvd.nist.gov/vuln/detail/'#老美网站待爬数据,右击页面看到数据是静态的爬起来舒服
score_li=[]
vector3_li=[]
vector2_li=[]
for url_code in cve_list:#取列表参数
url = '{}{}'.format(start_url,url_code)#url拼接
response = request.urlopen(url)
result = response.read().decode()
html = etree.HTML(result)
v3BaseScore = html.xpath('//span[@data-testid="vuln-cvssv3-base-score"]/text()')#etree定位so easy
Vector3 = html.xpath('//span[@data-testid="vuln-cvssv3-vector"]/text()')
Vector2 = html.xpath('//span[@data-testid="vuln-cvssv2-vector"]/text()')
score_li.append(' '.join(v3BaseScore))#格式化保存页面提取的数据
vector3_li.append(' '.join(Vector3))
vector2_li.append(' '.join(Vector2))
df1 = pd.DataFrame({'v3BaseScore': score_li})#构建表头字段pandas方法
df2 = pd.DataFrame({'Vector3': vector3_li})
df3 = pd.DataFrame({'Vector2': vector2_li})
All = [df1, df2, df3]
writer = pd.ExcelWriter('test1.xlsx')#新建excel文件,
df1.to_excel(writer, sheet_name='Sheet1', startcol=1, index=False)#指定列逐行写入数据
df2.to_excel(writer, sheet_name='Sheet1', startcol=2, index=False)
df3.to_excel(writer, sheet_name='Sheet1', startcol=3, index=False)
writer.save()
writer.close()

业务需求现学pandas和openpyxl,

1、页面分析

2、定位分析

3、数据读写分析

4、网站容易爬挂,并发调低,user-agent代理可以搞起

import base64
import random
from multiprocessing.pool import ThreadPool
import time
import pandas as pd
from openpyxl import load_workbook
from urllib import request
from lxml import etree
from proxies import * def task1():
user_agent_list = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
] # count = 0
header = {} header['User-Agent'] = random.choice(user_agent_list)
header.update({
'Host':' nvd.nist.gov',
'User-Agent:':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
}) time.sleep(0.3)
# read cve excle
wb = load_workbook('cve.xlsx')
sheet = wb['Sheet1']
cve_list = [] # part request
for i in sheet["D"][1:]:
cve_code = i.value
cve_list.append(cve_code)
start_url = 'https://nvd.nist.gov/vuln/detail/' score_li = []
vector3_li = []
vector3_href_li = []
vector2_li = []
vector2_href_li = []
for url_code in cve_list:
url = '{}{}'.format(start_url, url_code)
res = request.Request(url,headers=header)
response = request.urlopen(res)
result = response.read().decode() # 数据清洗部分
html = etree.HTML(result)
score_list = html.xpath('//span[@data-testid="vuln-cvssv3-base-score"]/text()')
vector3_list = html.xpath('//span[@data-testid="vuln-cvssv3-vector"]/text()')
vector2_list = html.xpath('//span[@data-testid="vuln-cvssv2-vector"]/text()')
vector3_href_list = html.xpath('//span[@data-testid="vuln-cvssv3-vector"]//a/@href')
vector2_href_list = html.xpath('//span[@data-testid="vuln-cvssv2-vector"]//a/@href')
score_li.append(' '.join(score_list))
vector3_li.append(' '.join(vector3_list))
vector3_href_li.append(' '.join(vector3_href_list))
vector2_li.append(' '.join(vector2_list))
vector2_href_li.append(' '.join(vector2_href_list)) # create some Pandas DateFrame from some data
df1 = pd.DataFrame({'CVSSv3.0BaseScore': score_li})
df2 = pd.DataFrame({'CVSS v3.0 Vector': vector3_li})
df3 = pd.DataFrame({'CVSS v3.0 Vector link': vector3_href_li})
df4 = pd.DataFrame({'CVSS v2.0 Vector': vector2_li})
df5 = pd.DataFrame({'CVSS v2.0 Vector link': vector2_href_li})
All = [df1, df2, df3, df4, df5] # create a Pandas Excel writer using xlswriter
writer = pd.ExcelWriter('basescore.xlsx') df1.to_excel(writer, sheet_name='Sheet2', startcol=2, index=False)
df2.to_excel(writer, sheet_name='Sheet2', startcol=3, index=False)
df3.to_excel(writer, sheet_name='Sheet2', startcol=4, index=False)
df4.to_excel(writer, sheet_name='Sheet2', startcol=5, index=False)
df5.to_excel(writer, sheet_name='Sheet2', startcol=6, index=False) writer.save()
writer.close() def process_request(self, request, spider):
PROXIES = [
{'ip_port': '61.160.233.8', 'user_pass': ''},
{'ip_port': '125.93.149.186', 'user_pass': ''},
{'ip_port': '58.38.86.181', 'user_pass': ''},
{'ip_port': '119.142.86.110', 'user_pass': ''},
{'ip_port': '124.161.16.89', 'user_pass': ''},
{'ip_port': '61.160.233.8', 'user_pass': ''},
{'ip_port': '101.94.131.237', 'user_pass': ''},
{'ip_port': '219.157.162.97', 'user_pass': ''},
{'ip_port': '61.152.89.18', 'user_pass': ''},
{'ip_port': '139.224.132.192', 'user_pass': ''}
]
proxy = random.choice(PROXIES)
if proxy['user_pass'] is not None:
request.meta['proxy'] = "http://%s" % proxy['ip_port']
encodebytes = base64.b64encode(proxy['user_pass'].encode(encoding='utf-8')) # 注意encodebytes类型是byte,不是str
encoded_user_pass = str(encodebytes, 'utf-8')
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
else:
request.meta['proxy'] = "http://%s" % proxy['ip_port'] if __name__ == '__main__': pool = ThreadPool()
pool.apply_async(task1)
pool.apply_async(process_request)
pool.close()
pool.join()

优化版

操作excel文件爬取nvd.nist数据的更多相关文章

  1. Python:将爬取的网页数据写入Excel文件中

    Python:将爬取的网页数据写入Excel文件中 通过网络爬虫爬取信息后,我们一般是将内容存入txt文件或者数据库中,也可以写入Excel文件中,这里介绍关于使用Excel文件保存爬取到的网页数据的 ...

  2. Python实训day07pm【Selenium操作网页、爬取数据-下载歌曲】

    练习1-爬取歌曲列表 任务:通过两个案例,练习使用Selenium操作网页.爬取数据.使用无头模式,爬取网易云的内容. ''' 任务:通过两个案例,练习使用Selenium操作网页.爬取数据. 使用无 ...

  3. 用Python的pandas框架操作Excel文件中的数据教程

    用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...

  4. python爬虫25 | 爬取下来的数据怎么保存? CSV 了解一下

    大家好 我是小帅b 是一个练习时长两年半的练习生 喜欢 唱! 跳! rap! 篮球! 敲代码! 装逼! 不好意思 我又走错片场了 接下来的几篇文章 小帅b将告诉你 如何将你爬取到的数据保存下来 有文本 ...

  5. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  6. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  7. java 操作excel 文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  8. C#操作Excel文件(转)

    摘要:本文介绍了Excel对象.C#中的受管代码和非受管代码,并介绍了COM组件在.net环境中的使用. 关键词:受管代码:非受管代码:Excel对象:动态连接库 引言 Excel是微软公司办公自动化 ...

  9. python 操作Excel文件

    1   安装xlrd.xlwt.xlutils cmd下输入: pip install xlrd        #读取excel pip install xlwt        #写入excel pi ...

随机推荐

  1. centos7上配置mysql8的主从复制

    注意:1.主库:10.1.131.75,从库:10.1.131.762.server-id必须是纯数字,并且主从两个server-id在局域网内要唯一. [主节点]vi /etc/my.cnf[mys ...

  2. [转帖]ASML EUV光刻机累计生产450万块晶圆:一台12亿元

    ASML EUV光刻机累计生产450万块晶圆:一台12亿元 来源驱动之家 ...网页被我关了 就这样吧. 截至目前,华为麒麟990 5G是唯一应用了EUV极紫外光刻的商用芯片,台积电7nm EUV工艺 ...

  3. lombok的介绍、使用、简单分析和插件

    学习下Lombok. 关于POJO Java面向对象编程中的特性中有封闭性和安全性.封闭性即对类中的域变量进行封闭操作,即用private来修饰他们.如此一来,其他类就不能对该变量访问了.这样,我们就 ...

  4. 获取Url地址中参数的3种方法【华为云技术分享】

    获取Url的代码如下:window.location.href; 方法一:原生js(假设已经获得了Url地址) var url = 'https://gitbook.cn/gitchat/geekbo ...

  5. Java 8——接口中个的默认方法和静态方法

    在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...

  6. 2019-11-29-VisualStudio-使用三个方法启动最新-C#-功能

    原文:2019-11-29-VisualStudio-使用三个方法启动最新-C#-功能 title author date CreateTime categories VisualStudio 使用三 ...

  7. 给定制的vuejs组件添加v-model双向绑定支持

    用过vuejs的前端工程师,对于v-model一定印象深刻.它向类似textarea,input等原生html原生添加双向数据绑定的能力非常方便.但是对于你的定制vue组件并不是能够直接应用v-mod ...

  8. JVM Code Cache空间不足,导致服务性能变慢

    本文阅读时间大约5分钟. 有业务反馈,线上一个应用运行了一段时间之后,在高峰期之后,突然发现处理能力下降,接口的响应时间变长,但是看Cat上的GC数据,一切都很正常. 通过跳板机上机器查看日志,发现一 ...

  9. Spark GraphX图计算核心源码分析【图构建器、顶点、边】

    一.图构建器 GraphX提供了几种从RDD或磁盘上的顶点和边的集合构建图形的方法.默认情况下,没有图构建器会重新划分图的边:相反,边保留在默认分区中.Graph.groupEdges要求对图进行重新 ...

  10. ORACLE ORION测试IO性能

    https://www.oracle.com/technetwork/cn/topics/index-088165-zhs.html 下载地址 Orion是Oracle提供的IO性能测试工具,运行该工 ...