每个漏洞条目包含:

乌云ID,漏洞标题,漏洞所属厂商,白帽子,漏洞类型,厂商或平台给的Rank值

主要是做数据分析使用:
可以分析某厂商的各类型漏洞的统计;
或者对白帽子的能力进行分析.....

数据更新时间:2016/5/27
漏洞条目:104796条

数据截图如下:

数据网盘链接:

链接:http://pan.baidu.com/s/1bpDNKOv 密码:6y57

爬虫脚本:

# coding:utf-8
# author: anka9080
# version: 1.0 py3 import sys,re,time,socket
from requests import get
from queue import Queue, Empty
from threading import Thread # 全局变量
COUNT = 1
START_URL = 'http://wooyun.org/bugs'
ID_DETAILS = []
ALL_ID = []
Failed_ID = []
PROXIES = [] HEADERS = {
"Accept": "text/html,application/xhtml+xml,application/xml,application/json;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "zh-CN,zh;q=0.8",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"DNT": "1",
"Host": "wooyun.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2716.0 Safari/537.36"
} class WooYunSpider(Thread):
"""docstring for WooYunSpider"""
def __init__(self,queue):
Thread.__init__(self)
self.pattern1 = re.compile(r'title>(.*?)\| WooYun.*?keywords" content="(.*?),(.*?),(.*?),wooyun',re.S) # 匹配模式在 compile 的时候指定
self.pattern2 = re.compile(r"漏洞Rank:(\d{1,3})")
self.queue = queue
self.start() # 执行 run() def run(self):
"每次读取 queue 的一条"
global COUNT,RES_LOG,ERR_LOG
while(1):
try:
id = self.queue.get(block = False)
r = get('http://wooyun.org/bugs/' + id,headers = HEADERS)
html = r.text
except Empty:
break
except Exception as e:
msg = '[ - Socket_Excpt ] 链接被拒绝,再次添加到队列:' + id
print(msg)
ERR_LOG.write(msg+'\n')
self.queue.put(id) # 访问失败则把这个 URL从新加入队列
else:
title,comp,author,bug_type,rank = self.get_detail(html,id)
detail = id+'----'+title+'----'+comp+'----'+author+'----'+bug_type+'----'+rank
try: # 写入文件可能会诱发 gbk 编码异常,这里保存 id 到 failed
RES_LOG.write(detail + '\n')
except Exception as e:
Failed_ID.append(id)
msg = '[ - Encode_Excpt ] 字符编码异常:' + id
print(msg)
ERR_LOG.write(msg+'\n')
ID_DETAILS.append(detail)
# time.sleep(1) print('[ - info ] id: {} count: {} time: {:.2f}s'.format(id,COUNT,time.time() - start))
COUNT += 1 # 由 缺陷编号 获得对应的 厂商 和 漏洞类型信息
def get_detail(self,html,id):
global ERR_LOG
try:
# print(html)
res = self.pattern1.search(html)
title = res.group(1).strip()
comp = res.group(2).strip()
author = res.group(3).strip()
bug_type = res.group(4).strip()
except Exception as e:
msg = '[ - Detail_Excpt ] 未解析出 标题等相关信息:' + id
print(msg)
ERR_LOG.write(msg+'\n')
Failed_ID.append(id)
title,comp,author,bug_type,rank = 'Null','Null','Null','Null','Null'
else:
try:
res2 = self.pattern2.search(html) # 若厂商暂无回应则 rank 为 Null
rank = res2.group(1).strip()
except Exception as e:
msg = '[ - Rank_Excpt ] 未解析出 Rank:' + id
print(msg)
ERR_LOG.write(msg+'\n')
rank = 'Null' finally:
try:
print (title,comp,author,bug_type,rank)
except Exception as e:
msg = '[ - Print_Excpt ] 字符编码异常:' + id +'::'+ str(e)
print(msg)
ERR_LOG.write(msg+'\n')
return title,comp,author,bug_type,rank class ThreadPool(object):
def __init__(self,thread_num,id_file):
self.queue = Queue() # 需要执行的队列
self.threads = [] # 多线程列表
self.add_task(id_file)
self.init_threads(thread_num) def add_task(self,id_file):
with open(id_file) as input:
for id in input.readlines():
self.queue.put(id.strip()) def init_threads(self,thread_num):
for i in range(thread_num):
print ('[ - info :] loading threading ---> ',i)
# time.sleep(1)
self.threads.append(WooYunSpider(self.queue)) # threads 列表装的是 爬虫线程 def wait(self):
for t in self.threads:
if t.isAlive():
t.join() def test():
url = 'http://wooyun.org/bugs/wooyun-2016-0177647'
r = get(url,headers = HEADERS)
html = r.text
# print type(html)
# keywords" content="(.*?),(.*?),(.*?),wooyun ====> 厂商,白帽子,类型
pattern1 = re.compile(r'title>(.*?)\| WooYun')
pattern2 = re.compile(r'keywords" content="(.*?),(.*?),(.*?),wooyun')
pattern3 = re.compile(r'漏洞Rank:(\d{1,3})')
for x in range(500):
res = pattern1.search(html)
# print (res.group(1))
res = pattern2.search(html)
# print (res.group(1),res.group(2),res.group(3))
res = pattern3.search(html)
# print (res.group(1))
x += 1
print(x)
# rank = res.group(4).strip() # print html def test2():
url = 'http://wooyun.org/bugs/wooyun-2016-0177647'
r = get(url,headers = HEADERS)
html = r.text
pattern = re.compile(r'title>(.*?)\| WooYun.*?keywords" content="(.*?),(.*?),(.*?),wooyun.*?漏洞Rank:(\d{1,3})',re.S)
for x in range(500):
res = pattern.search(html)
# print (res.group(1),res.group(2),res.group(3),res.group(4),res.group(5))
x += 1
print(x)
# 保存结果
def save2file(filename,filename_failed_id):
with open(filename,'w') as output:
for item in ID_DETAILS:
try: # 写入文件可能会诱发 gbk 编码异常,这里忽略
output.write(item + '\n')
except Exception as e:
pass with open(filename_failed_id,'w') as output:
output.write('\n'.join(Failed_ID)) if __name__ == '__main__': socket.setdefaulttimeout(1)
start = time.time() # test() # 日志记录
ERR_LOG = open('err_log.txt','w')
RES_LOG = open('res_log.txt','w')
id_file = 'id_0526.txt'
# id_file = 'id_test.txt'
tp = ThreadPool(20,id_file)
tp.wait() save2file('id_details.txt','failed_id.txt') end = time.time()
print ('[ - info ] cost time :{:.2f}s'.format(end - start))

  

『Python』 爬取 WooYun 论坛所有漏洞条目的相关信息的更多相关文章

  1. 【Python】爬取理想论坛单帖爬虫

    代码: # 单帖爬虫,用于爬取理想论坛帖子得到发帖人,发帖时间和回帖时间,url例子见main函数 from bs4 import BeautifulSoup import requests impo ...

  2. 『Scrapy』爬取斗鱼主播头像

    分析目标 爬取的是斗鱼主播头像,示范使用的URL似乎是个移动接口(下文有提到),理由是网页主页属于动态页面,爬取难度陡升,当然爬取斗鱼主播头像这么恶趣味的事也不是我的兴趣...... 目标URL如下, ...

  3. 『Scrapy』爬取腾讯招聘网站

    分析爬取对象 初始网址, http://hr.tencent.com/position.php?@start=0&start=0#a (可选)由于含有多页数据,我们可以查看一下这些网址有什么相 ...

  4. python scrapy爬取HBS 汉堡南美航运公司柜号信息

    下面分享个scrapy的例子 利用scrapy爬取HBS 船公司柜号信息 1.前期准备 查询提单号下的柜号有哪些,主要是在下面的网站上,输入提单号,然后点击查询 https://www.hamburg ...

  5. 大神:python怎么爬取js的页面

    大神:python怎么爬取js的页面 可以试试抓包看看它请求了哪些东西, 很多时候可以绕过网页直接请求后面的API 实在不行就上 selenium (selenium大法好) selenium和pha ...

  6. python连续爬取多个网页的图片分别保存到不同的文件夹

      python连续爬取多个网页的图片分别保存到不同的文件夹 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...

  7. python定时器爬取豆瓣音乐Top榜歌名

    python定时器爬取豆瓣音乐Top榜歌名 作者:vpoet mail:vpoet_sir@163.com 注:这些小demo都是前段时间为了学python写的,现在贴出来纯粹是为了和大家分享一下 # ...

  8. python大规模爬取京东

    python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...

  9. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

随机推荐

  1. Linux下多任务间通信和同步-概述

    Linux下多任务间通信和同步-概述 嵌入式开发交流群280352802,欢迎加入! 在前面,我们学习了两种多任务的实现手段:进程和线程.由于进程是工作在独立的内存空间中,不同的进程间不能直接访问到对 ...

  2. JavaScript交换两个变量值的七种解决方案

    前言 这篇文章总结了七种办法来交换a和b的变量值 1 2 var a = 123; var b = 456; 交换变量值方案一 最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太l ...

  3. 10个经典的Java面试题

    这里有10个经典的Java面试题,也为大家列出了答案.这是Java开发人员面试经常容易遇到的问题,相信你了解和掌握之后一定会有所提高.让我们一起来看看吧. 1.Java的HashMap是如何工作的? ...

  4. log4jdbc与logback集合打印日志过多的解决

    在项目中使用了log4jdbc,可以很方便的把sql的参数也打印出来,便于问题调试.比如原始sql: select * from t_order where order_id = ? : 经过log4 ...

  5. AbpZero--4.不使用谷歌字体,提升加载速度

    jtable控件样式中会使用到谷歌字体,每次访问都特别慢 1.打开jtable.css文件 [..\MyCompanyName.AbpZeroTemplate.Web\libs\jquery-jtab ...

  6. Struts2 入门(新手必看)

    船舶停靠在港湾是很安全的,但这不是造船的目的     Struts 2及其优势 Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点 Struts ...

  7. hdu4010 Query On The Trees

    Problem Description We have met so many problems on the tree, so today we will have a query problem ...

  8. caffe源代码分析--math_functions.cu代码研究

    当中用到一个宏定义CUDA_KERNEL_LOOP 在common.hpp中有. #defineCUDA_KERNEL_LOOP(i,n) \ for(inti = blockIdx.x * bloc ...

  9. 【开源java游戏框架libgdx专题】-14-系统控件-Skin类

    Skin类主要用于存储用户界面的资源,该资源主要用于窗口部件.这些资源也包括纹理图片.位图画笔.颜色等内容.方便创建游戏组件,同时使用Skin也可以批量的粗略处理一些窗口部件. test.json { ...

  10. 解决Windows8前面板耳机无声的问题

    Windows8已经到来不久了,相信很多朋友已经在使用,在使用时也许会遇到前面板耳机无声的问题,网上的其他办法很麻烦还不一定能解决,在这里我会给大家提供最简单的办法解决这个问题. 百度经验:jingy ...