商务服务
mysql怎么生成词云_Scrapy+eChart自动爬取生成网络安全词云
2024-11-04 23:53

【小宅按】因为工作的原因,近期笔者开始持续关注一些安全咨询网站,一来是多了解业界安全咨询提升自身安全知识,二来也是需要从各类安全网站上收集漏洞情报。

mysql怎么生成词云_Scrapy+eChart自动爬取生成网络安全词云

作为安全情报领域的新手,面对大量的安全咨询,多少还是会感觉无从下手力不从心。周末闲来无事,突发奇想,如果搞个爬虫,先把网络安全类文章爬下来,然后用机器学习先对文章进行分析,自动提取文章主成分关键词,然后再根据实际需求有选择的阅读相关文章,岂不是可以节省很多时间。

如果能提取文章的关键词,还可以根据近期文章的关键词汇总了解总体的安全态势和舆情,感觉挺靠谱。

整体思路

如前文所述,思路其实很简单:用Scrapy先去安全咨询网站上爬取文章的标题和内容

对文章的内容进行切词

使用TF-IDF算法提取关键词

将关键词保存到数据库

最后可以用可视化将近期出现的比较频繁的关键词做个展示

看起来也不会很难,文末有代码的链接。

Scrapy爬虫

Scrapy是非常常用的python爬虫框架,基于scrapy写爬虫可以节省大量的代码和时间,原理这里就不赘述了,感兴趣的同学自行科普Scrapy架构

安装Scrapy

笔者基于python3.6来安装Scrapy,所以前提是你的机器已经安装好python3的环境。scrapy安装办法非常简单,使用pip可以一键安装

pip3 install scrapy

装好以后,不熟悉scrapy的同学可以先看看官方示例程序熟悉一下,在cmd里执行下面的命令生成示例程序

scrapy startproject tutorial

即可在当前目录自动创建一个完整的示例教程,这里我们可以看到整个爬虫的目录结构如下

tutorial/

scrapy.cfg # deploy configuration file

tutorial/ # project's Python module, you'll import your code from here

items.py # project items definition file

pipelines.py # project pipelines file

settings.py # project settings file

spiders/ # a directory where you'll later put your spiders

分析网页

本例以“

爬取网页

爬虫主体代码如下,使用scrapy的框架开发的爬虫实际的代码是非常精简的

import scrapy

from scrapy import Request, Selector

from sec_news_scrapy.items import SecNewsItem

class SecNewsSpider(scrapy.Spider):

name = "security"

allowed_domains = ["easyaq.com"]

start_urls = []

for i in range(2, 17):

req_url = 'https://www.easyaq.com/type/%s.shtml' % i

start_urls.append(req_url)

def parse(self, response):

topics = []

for sel in response.xpath('//*[@id="infocat"]/div[@class="listnews bt"]/div[@class="listdeteal"]/h3/a'):

topic = {'title': sel.xpath('text()').extract(), 'link': sel.xpath('@href').extract()}

topics.append(topic)

for topic in topics:

yield Request(url=topic['link'][0], meta={'topic': topic}, dont_filter=False, callback=self.parse_page)

def parse_page(self, response):

topic = response.meta['topic']

selector = Selector(response)

item = SecNewsItem()

item['title'] = selector.xpath("//div[@class='article_tittle']/div[@class='inner']/h1/text()").extract()

item['content'] = "".join(selector.xpath('//div[@class="content-text"]/p/text()').extract())

item['uri'] = topic['link'][0]

print('Finish scan title:' + item['title'][0])

yield item

我们把网站上所有分类的url枚举出来放在start_url里面,parse是框架执行爬虫任务的入口,框架会自动访问前面start_url设置的页面,返回一个response对象,从这个对象中可以通过xpath提取有用的信息。

这里我们要从每一个类型页面的html中分析出文章的标题和访问uri,谷歌的chrome提供了很好的xpath生成工具,可以快速提取目标的xpath,在浏览器中按F12可以看到网页的html源码,找到需要提取的内容,右键可以提取xpath。image.png

获取到文章内容的uri还没有完,我们还需要进一步访问该uri,并且把文章的内容记录下来供下一步分析,这里的parse_page函数就是用来做内容抽取的,方法同上,借助chrome的xpath分析工具很快就能提取到文章内容。

内容提取到以后,这里将内容存到Item中,Item是Scrapy框架的另一个组成部分,类似于字典类型,主要是用来定义传递数据的格式,而传递是为了下一步数据持久化。

数据持久化

Item.py

class SecNewsItem(scrapy.Item):

title = scrapy.Field()

content = scrapy.Field()

uri = scrapy.Field()

pass

pipeline.py

import jieba

import jieba.analyse

import pymysql

import re

def dbHandle():

conn = pymysql.connect(

host="localhost",

user="root",

passwd="1234",

charset="utf8",

db='secnews',

port=3306)

return conn

def is_figure(str):

value = re.compile(r'^d+$')

if value.match(str):

return True

else:

return False

def save_key_word(item):

words = jieba.analyse.extract_tags(item['content'], topK=50, withWeight=True)

sql = "insert ignore into t_security_news_words(title, `key`, val) values (%s,%s,%s)"

for word in words:

if is_figure(word[0]):

continue

cursor.execute(sql, (item['title'][0], word[0], int(word[1] * 1000)))

def save_article(item):

sql = "insert ignore into t_security_news_article(title, content, uri) values (%s,%s,%s)"

cursor.execute(sql, (item['title'][0], item['content'], item['uri']))

class TutorialPipeline(object):

def process_item(self, item, spider):

save_key_word(item)

save_article(item)

return item

settings.py

ITEM_PIPELINES = {

'sec_news_scrapy.pipelines.TutorialPipeline': 300,

}

爬虫主程序中收集到的Item会传入到这里,这里有两个步骤save_key_word和save_article,后者将文章的标题、内容、uri存入到MySQL表里;这里着重介绍前者save_key_word函数。

我们的目标是自动分析文章里面跟主题相关的关键字,并且分析出每个词的权重,具体来说包含以下步骤:切词:中文切词工具有很多,这里我选择用

提取关键字:jieba里面已经实现好了TF/IDF的算法,我们利用该算法从每篇文章里选择top50的词汇,并且带上权重。用这种方式提取关键字还可以直接把常见的提用词过滤掉,当然jieba也支持自定义停用词

words = jieba.analyse.extract_tags(item['content'], topK=50, withWeight=True)提取关键词数据存储:提取到需要的信息,下一步需要把信息保存到MySQL,在python3下面可以用pymysql来操作MySQL文章列表关键字列表

关键词可视化-词云

通过上面的程序,我们已经可以把网站上的安全咨询文章全部爬取到数据库,并且从每篇文章里面提取50个关键字。接下来我们希望把这些关键词用可视化的方式展示出来,出现频度高的关键词做高亮显示,所以很自然的想到用词云展示。

这里我们用eChart提供的

def get_key_word_from_db():

words = {}

with conn.cursor() as cursor:

cursor.execute(

"select `key`, sum(val) as s from t_security_news_words group by `key` order by s desc limit 300")

for res in cursor.fetchall():

words[res[0]] = int(res[1])

return words

return {}

finally:

conn.close()

查看动态效果词云可视化效果

词云可视化效果

调试技巧

python有很多IDE可选,笔者选择用pycharm,在调试scrapy程序的时候,需要用到scrapy的引擎启动,所以用默认的pycharm没法调试,需要做一些设置,如下图所示

run -> Edit Configurations

script填写scrapy安装目录里面的cmdline.py的位置;script parameters是执行scrapy时用的参数,security是我们这个爬虫的名字;Working directory写爬虫的根目录。image.png

配置好以后就可以直接用pycharm来启动debug了,run -> debug 'xxx'

完整的代码示例,包含echart的部分,请见

    以上就是本篇文章【mysql怎么生成词云_Scrapy+eChart自动爬取生成网络安全词云】的全部内容了,欢迎阅览 ! 文章地址:http://houdi.cs-ej.cn/news/396.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 成事e家移动站 http://houdi.cs-ej.cn/mobile/ , 查看更多   
最新新闻
基本知识
第一章 总则1.什么是GCP?GCP的核心(宗旨目、的)是什么?答:GCP是英文 good clinic practice的缩写,在中文应该理解成药物临
2023-2028年中国新媒体产业投资分析及前景预测报告
媒体的“新”与“旧”是相对而言的。一般地,新媒体是相对于传统意义上的报刊、广播、电视这些大众传播媒体而言的,是指随着传播
四、一些教训和挫折,以及对应的next step
本篇内容是基于自己最近坚持小红书日更两周(还在继续,已经快18天了)的过程进行的深度复盘总结本人只是一个1000多粉丝的小小小
9月再添2款高续航电动车,最高续航超250公里,长途出行的有福了
您在阅读前请点击上面的“关注”二字,后续会为您提供更多有价值的相关内容,感谢您的支持。电动车是很实用且实惠的代步工具,但
2023年黑龙江省考行测真题及答案.pdf
2023年黑龙江公务员录用考试《行政职业能力测验》重要提示:为维护您的个人权益,确保公务员考试的公平公正,请您协助我们监督考
什么样的女人性欲强呢?教你有效提高女性性欲
对于一些男人来说,他们可能想找一个性欲强的女人,但是什么样的女人性欲强呢?从什么方面来判断呢?从哪里判断女性外形性欲的强
互联网营销培训课程
互联网设计基础阶段 ps1.基础模块介绍软件(应用领域、优势)/软件界面与设置/视图缩放与移动/选择工具/屏幕显示模式/包装效果图
【干货】这才是Win10/Win7官方原版系统下载的正确方式!
坊间流传着这样一句话:「重启解决90%的问题,重装解决99%的问题,重买解决100%的问题」诚然,在电脑系统遇到一些比较棘手的问题
2024年实用的人生格言警句合集35句
2024年实用的人生格言警句合集35句  人类要在竞争中求保留,更要格斗。——孙中山以下是小编为大家提供的人生格言警句35句,欢
做为互联网创业者要有哪些技术常识?
这几年,创业环境非常好,不但国家鼓励,市场环境也比较好,都是各种鼓励创新创业。国家支持创业,但是现在的企业业务不再像以前
本企业新闻