Python结合jieba与wordcloud生成漏洞标题词云实战

何川
何川
发布时间:2026-10-11 | 2人浏览过
原创

本文介绍如何利用Python的jieba库进行中文分词,结合wordcloud库生成可视化词云。通过多线程爬取漏洞平台标题数据,统计SQL注入、命令执行等高频漏洞类型,直观展示安全趋势。

实现思路与目标

词云(Word Cloud)是一种通过视觉化方式展示文本数据中关键词频率的工具。在安全领域,通过分析漏洞标题的高频词汇,可以快速识别当前主流的安全威胁类型。本示例以某漏洞平台(镜像站地址:http://wy.hxsec.com/bugs.php)的公开数据为目标,通过Python脚本提取标题,利用jieba进行分词处理,最终使用wordcloud生成词云图片。

项目完整代码可参考:https://github.com/theLSA/wooyun_wordcloud

数据爬取与预处理

首先,需要从目标网站抓取漏洞标题。由于页面数量较多(示例中涉及近3000页),采用多线程并发抓取以提高效率。抓取逻辑主要包含以下步骤:

  1. 构建请求队列:将页码(1至2961)放入Queue队列中。
  2. 多线程抓取:启动20个线程,每个线程从队列中获取页码,拼接URL(如 http://wy.hxsec.com/bugs.php?page=N)。
  3. 正则解析:使用正则表达式提取页面中特定样式的链接文本(即漏洞标题)。
  4. 文件写入:将提取的标题逐行追加写入本地文本文件(wooyunBugTitle.txt)。

以下是数据抓取的核心代码实现:

#coding:utf-8
#Author:LSA
#Description:wordcloud for wooyun
#Date:20170904

import urllib
import urllib2
import re
import threading
import Queue

q0 = Queue.Queue()

threads = 20

threadList = []

def gettitle():
 while not q0.empty():

 i = q0.get()
 url = 'http://wy.hxsec.com/bugs.php?page=' + str(i)
 html = urllib.urlopen(url).read()
 reg = re.compile(r'<li style="width:60%;height:25px;background-color:#FFFFFF;float:left" ><a href=".*?" rel="external nofollow" >(.*?)</a>')
 titleList = re.findall(reg,html)
 fwy = open("wooyunBugTitle.txt","a")
 for title in titleList:
 fwy.write(title+'\n')
 fwy.flush()
 fwy.close()
 print 'Page ' + str(i) + ' over!'

def main():
 for page in range(1,2962):
 q0.put(page)
 for thread in range(threads):
 t = threading.Thread(target=gettitle)
 t.start()
 threadList.append(t)
 for th in threadList:
 th.join()

 print '***********************All pages over!**********************'

if __name__ == '__main__':
 main()

分词与词云生成

获取标题文本后,需进行中文分词处理。jieba库提供了高效的中文分词算法。随后,利用wordcloud库将分词结果转换为图片。

关键步骤如下:

  1. 读取文本:打开之前保存的标题文件。
  2. 分词处理:使用jieba.cut进行分词,并通过空格连接成字符串(wordcloud要求以空格分隔词汇)。
  3. 配置词云参数:指定字体路径(如msyh.ttf,防止中文乱码)、背景色、最大词汇量及字体大小。
  4. 生成与保存:调用generate方法生成词云对象,并保存为图片文件。

以下是生成词云的代码:

# coding: utf-8

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

data = open("wooyunBugTitle.txt","r").read()
cutData = jieba.cut(data, cut_all=True)
word = " ".join(cutData)

cloud = WordCloud(
 #设置字体,不指定可能会出现中文乱码
 font_path="msyh.ttf",
 #font_path=path.join(e,'xxx.ttc'),
 #设置背景色
 background_color='white',
 #词云形状
 #mask=color_mask,
 #允许最大词汇
 max_words=2000,
 #最大号字体
 max_font_size=40
 )

wc = cloud.generate(word)
wc.to_file("wooyunwordcloud.jpg") 
plt.imshow(wc)
plt.axis("off")
plt.show()

结果分析

通过生成的词云图片,可以直观地看到漏洞标题中的高频词汇。根据示例结果,SQL注入在漏洞标题中出现频率最高,命令执行次之,信息泄漏紧随其后。这反映了当时该平台上此类安全问题的普遍性。

以上就是利用Python结合jieba和wordcloud实现词云效果的详细内容,更多关于Python安全数据分析的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表