2023.8.21-2023.8.27暑假第七周博客

Arkiya / 2023-08-26 / 原文

2023.8.21

今天主要是对mapreduce进行了一个了解,主要是对爬取下来的数据进行清洗的过程

在本次的过程中,由于爬取的内容比较规整,因此采用的excel进行处理

 mapreduce在我的理解中,对数据进行的是预处理,即把数据变得规整便于处理

map阶段就是写对数据处理,即你想怎么优化这些数据

reduce阶段就是输出数据

最近要开始做信息化领域热词分析了

2023.8.22

今天爬取了博客园的首页中的热点新闻,爬取的过程参考了学长的代码,整体来说还是比较顺利,之后是对爬取下来的内容做了一个排序和输出

 

爬取下来的内容大概就是这些

import requests
import re
import xlwt
url = 'https://news.cnblogs.com/n/digg'
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
def get_page(url):
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
print('获取网页成功')
print(response.encoding)
return response.text
else:
print('获取网页失败')
except Exception as e:
print(e)
f = xlwt.Workbook(encoding='utf-8')
sheet01 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)
sheet01.write(0, 0, '博客最热新闻') # 第一行第一列
urls = ['https://news.cnblogs.com/n/digg?page={}'.format(i * 1) for i in range(100)]
temp=0
num=0
for url in urls:
print(url)
page = get_page(url)
items = re.findall('<h2 class="news_entry">.*?<a href=".*?" target="_blank">(.*?)</a>',page,re.S)
print(len(items))
print(items)
for i in range(len(items)):
sheet01.write(temp + i + 1, 0, items[i])
temp += len(items)
num+=1
print("已打印完第"+str(num)+"页")
print("打印完!!!")
f.save('Hotword.xls')
爬取完成之后就是需要对热词进行统计,统计完之后存到mysql中
 
2023.8.23
今天对昨天爬取下来的内容做了一个统计,统计过程中用了python
import jieba
import pandas as pd
import re
import mysql.connector
from collections import Counter
if __name__ == '__main__':
filehandle = open("data.txt", "r", encoding='UTF-8');
mystr = filehandle.read()
seg_list = jieba.cut(mystr) # 默认是精确模式
print(seg_list)
stopwords = ['的', ',', ')', '(', '-', '.', '—', ':', '之', '(', ')', '?', '和', '使用', '实现', '、', '与', '!', '你', '了', '中',
'】', '【', '中国', '发布', '公司', '首次', '全球', '正式', '2019', '2020', '亿美元', '20', '10', '&#', '首个', '正在', '最大',
'成为', '第一', '这', '个', '如何', '人类', '什么', '一个', '宣布', '可能', '推出', '没有', '地球', '到底', '回应', '50', '100', '可以',
'开始', '这个', '问题', '为什么', '我们', '背后', '终于', '重磅', '160', '国内', '需要', '为何', '亿元', '发现', '成功', '最强', '不是', '人生']
c = Counter()
for x in seg_list:
if x not in stopwords:
if len(x) > 1 and x != '\r\n':
c[x] += 1

print('\n词频统计结果:')
f = open("finalwords.txt", 'w', encoding='utf-8')
f2 = open("finalnumber.txt", 'w', encoding='utf-8')
for (k, v) in c.most_common(100): # 输出词频最高的前两个词
print("%s:%d" % (k, v))
words = k
number = str(v)
f.write( words )
f2.write(number)
line = '\n'
f.write( line )
f2.write(line)

f.close()

filehandle.close();
 
上面的词语是自定义的,表示过滤掉这些词语,之后就得到两个文件
一个用于储存热词,另一个用于储存它对应的出现次数
之后需要对存储到数据库中,之后还要做词云的可视化。
 
 2023.8.24
今天主要是做了一下可视化,说实话整个过程可以说是十分的艰辛
首先是我了解到做可视化需要用到springboot+echarts,这两个技术确实都没有
接触过,springboot在我理解就是一种类型,是一种很方便做可视化的代码
echarts则是提供的样式,可以引用
今日仅仅是通过编写,实现了获取数据库中的内容
SpringBoot + MySQL + Echarts数据可视化_springboot可视化_Hadoop_Liang的博客-CSDN博客
参考了上述链接
http://localhost:8080/goods/list
访问该链接成功输出了数据库中的内容,值得注意的是,我试图寻找和javaweb类似的
数据库中的数据名称,发现并没有,最后是在entity中进行修改成功了
之后需要下载echarts,说实话,这个玩意下载起来还是费了不少力气,因为它的官网
十分不稳定,多数情况下都无法访问,因此我找到了他的github网址,但是github同样
不稳定,因此打了个油猴的脚本,访问之后当我搜索却无法找到对应内容,最后是从
csdn上下载了一个,但是后来了解到,echarts和后面要用来做词云图的echarts-wordcloud
需要版本的要求,echarts版本不能过低,否则无法使用词云图的插件,因此我又到处找
最终是下载了一个echart5.x,希望明天做可视化的时候能够顺利,另外,本次开发的过程中
我发现springboot是一个很好用的工具,因此在暑假剩下的这段时间打算学习一下springboot+echarts,另外放上今日的截图

 都是数据库中爬取到的内容

2023.8.25

今天继续做昨日的可视化,在昨天已经实现了获取数据库中数据的基础上,教程中是做了一个柱状图,我想先做一个柱状图出来看看效果,因此就跟着一起做了,这里引入了两个文件 一个是echarts-min.js,一个是jquery-3.5.1.min.js,这两个文件都是用于实现可视化的,同时我发现不知道为什么我的springboot项目下没有static和templates文件夹,因此

我需要自己创建,把上述两个文件放到static/js 文件夹下,在templates下创建了index.html

这时最坑爹的来了,页面404,就很无语,但是我查找半天没有结果,最终找了学长帮我调整了一下代码,可能还是自己没学过就直接上手,之后打开运行,确实没报错,显示了

echarts的标题,但是页面一片空白,一检查网页发现是无法加载js文件,普通的引入无法

加载,在学长的帮助下使用了一个themeleaf

添加了     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

然后在html的头文件添加xmlns:th="http://www.thymeleaf.org"

其实我自己也感觉出是路径的问题了

学长告诉我这是一个类似vue的模板引擎,是springboot原生的,在springboot中

一般不能用写html的方式写引用,因为不是分目录的关系,当运行了html文件后

它会和js文件夹并级,index放在template文件夹目录下的时候会有保护,就访问不到

js文件了,因此需要用到themeleaf,这里也把引用的代码放上来

 

<script th:src="@{js/jquery-3.5.1.min.js}"></script>
<script th:src="@{js/echarts.min.js}"></script>
<script th:src="@{js/echarts-wordcloud.min.js}"></script>

了解之后深感springboot的伟大,因此打算学习spring boot了

今日解决了引用的问题,明日就着手做出词云图。

2023.8.26

今日在昨日调整过后 成功做出了词云图