Python:物联网数据分析课程设计动态新闻标题热点挖掘

一、设计内容及目的

(一)设计内容

通过爬取学校新闻网页,获取新闻标题,通过词频统计制作出词云并生成图片。

(二)设计目的

新闻标题是新闻的主旨,从新闻标题中可以进行多种内容的挖掘,通过对学校新闻网的新闻进行分析获得热点词,基于这些标题中的热点词设计并实现构建词云的算法,最后根据词云模型统计热点词的词频,可以快速了解这段时间学校的工作重心和工作内容。

  • *总体设计

(一)通过请求头连接到学校新闻网页上,并测试是否连接成功;

(二)获取所有学校网页新闻标题并存放到列表中;

(三)创建词云,把爬取的新闻标题分词,进行词频统计,最后生成词云。

三、详细设计

(一) 连接页面 模块设计

1 .功能设计

(1)请求获取网页:在网页中打开”开发者工具”命令,找到请求标题;

(2)定义getjson()函数测试是否成功获取网页;

(3)通过python Request库的get()方法,构造一个向服务器请求资源的url对象;

(4)属性:response.status_code,HTTP请求返回状态,200表示成功,404表示失败。

2 . 代码实现

导入模块包

import requests

import jieba

import wordcloud

import matplotlib.pyplot as plt

from os import path

from lxml import etree

请求头

headers={

‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9′,

‘Accept-Encoding’: ‘gzip, deflate’,

‘Accept-Language’: ‘zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6’,

‘Host’: ‘www.haue.edu.cn’,

‘Referer’: ‘http://www.haue.edu.cn/info/1034/1502.htm’,

‘Upgrade-Insecure-Requests’: ‘1’,

‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48’

}

测试是否连接成功

def getjson(url):

response = requests.get(url, headers=headers,timeout=3)

if response.status_code == 200:

return response.content.decode(“utf-8”)

else:

print(“Fail to get page”)

return None

( 二 ) 获取页面新闻标题 模块设计

1 . 功能设计

(1)定义getPageInfo()函数获取学校页面信息;

(2)通过for循环爬取学校新闻156页新闻标题。

2 . 代码实现

获取页面新闻信息

def getPageInfo():

info_list=[]

for i in range (0,155):

if i==0:

url=’http://www.haue.edu.cn/xwdt/xxxw.htm’

else:

i = str(i)

url = ‘http://www.haue.edu.cn/xwdt/xxxw/’ + i + ‘.htm’

response = getjson(url)

tree = etree.HTML(response)

li_list = tree.xpath(‘/html/body/div[3]/div/div[2]/div[2]/ul/li’)

for li in li_list :

title = li.xpath(‘./a/text()’)

info_list.append(title)

return info_list

( 三 ) 词云制作 模块设计

1 . 功能设计

(1)定义createWordCloud()函数实现词云功能;

(2)把获取的所有新闻标题拼接成一个字符串,利用 Python 中著名的分词器 jieba(结巴分词),去除停用词;

(3)利用for循环进行词频统计;

(4)设置词云格式,可以基于本地图片的轮廓设置词云形状,最后生成词云并保存本地。

2 . 代码实现

创建词云

def createWordCloud(info_list):

article_dict = {}

content = ”.join(‘%s’ %a for a in info_list)

article_jieba = jieba.lcut(content)

stop_words = set(line.strip() for line in open(‘stopwords.txt’,encoding=’utf-8′))

词频统计

for data in article_jieba:

if len(data) == 1 or data in stop_words:

continue

if data not in article_dict:

article_dict[data] = 1

else:

article_dict[data] += 1

article_list = list(article_dict.items())

cloud_data = ”

把爬出来的字符放到该变量中

for word in article_list:

cloud_data += word[0] + ‘ ‘

backgroud_Image = plt.imread(‘bg.jpg’)

w = wordcloud.WordCloud(

background_color=’white’, # 设置背景颜色

mask=backgroud_Image, # 设置背景图片

font_path = “simhei.ttf”, # 若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字

max_words=2000, # 设置最大现实的字数

random_state=30, # 设置有多少种随机生成状态,即有多少种配色方案

max_font_size=200, # 设置字体最大值

)

w.generate(cloud_data)

显示词云图

plt.imshow(w)

是否显示x轴、y轴下标

plt.axis(‘off’)

plt.show()

获得模块所在的路径的

d = path.dirname(file)

w.to_file(path.join(d, “词云.jpg”))

if name == ‘main‘:

createWordCloud(getPageInfo())

四、程序调试结果及分析

(一) 连接页面 模块调试

这里只测试网页第154页的内容,连接成功并成功读出该页面所有信息。

Python:物联网数据分析课程设计动态新闻标题热点挖掘

图4-1 连接页面模块调试图

(二) 获取页面新闻标题 模块 调试

这里我们设计爬出的是每页的新闻标题,放到列表中存储,下图是调试出来的部分列表的信息。

Python:物联网数据分析课程设计动态新闻标题热点挖掘

图4-2 获取页面新闻标题模块调试图

  • *词云制作调试

用到的本地图片轮廓是中国地图,设置词云的格式:背景为白色,显示中文,最大2000字,30种颜色随机生成,字体最大值为200,运行的结果如4-3图所示。

原程序没有获取网页最新一页信息,经过修改代码,获取最新一页新闻信息,调试后的词云如图4.4所示。

Python:物联网数据分析课程设计动态新闻标题热点挖掘

图4-3 词云制作模块调试图

Python:物联网数据分析课程设计动态新闻标题热点挖掘

图4-4 词云制作模块调试图

导入模块包
import requests
import re
import jieba
import wordcloud
import json
import matplotlib.pyplot as plt
from os import path
from lxml import etree
from bs4 import BeautifulSoup
from imageio import imread
#请求头
headers={
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Host': 'www.haue.edu.cn',
    'Referer': 'http://www.haue.edu.cn/info/1034/1502.htm',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36 Edg/91.0.864.48'
}
#测试是否连接成功
def getjson(url):
    response = requests.get(url, headers=headers,timeout=3)
    if response.status_code == 200:
        return response.content.decode("utf-8")
    else:
        print("Fail to get page")
        return None
#获取页面新闻信息
def getPageInfo():
    info_list=[]
    for i in range (0,155):
        if i==0:
            url='http://www.haue.edu.cn/xwdt/xxxw.htm'
        else:
            i = str(i)
            url = 'http://www.haue.edu.cn/xwdt/xxxw/' + i + '.htm'
        response = getjson(url)
        tree = etree.HTML(response)
        li_list  = tree.xpath('/html/body/div[3]/div/div[2]/div[2]/ul/li')
        for li in li_list :
            title = li.xpath('./a/text()')
            # url = li.xpath('./a/@href')[0]
            # item = {}
            # item['title'] = title
            # item['url'] = 'http://www.haue.edu.cn/' + url[3:]
            # info_list.append(item)
        info_list.append(title)
    return info_list
#创建词云
def createWordCloud(info_list):
    article_dict = {}
    content = ''.join('%s' %a for a in info_list)
    article_jieba = jieba.lcut(content)
    stop_words = set(line.strip() for line in open('F:/大学学习记录/大三下学期/Python/2020-2021-2物联网数据分析课程设计实训/stopwords.txt',encoding='utf-8'))
    #词频统计
    for data in article_jieba:
        if len(data) == 1 or data in stop_words:
            continue
        if data not in article_dict:
            article_dict[data] = 1
        else:
            article_dict[data] += 1

    article_list = list(article_dict.items())

    cloud_data = ''
    # 把爬出来的字符放到该变量中
    for word in article_list:
        cloud_data += word[0] + ' '

    backgroud_Image = plt.imread('F:/大学学习记录/大三下学期/Python/2020-2021-2物联网数据分析课程设计实训/bg.jpg')
    w = wordcloud.WordCloud(
            background_color='white', # 设置背景颜色
            mask=backgroud_Image, # 设置背景图片
            font_path = "simhei.ttf", # 若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
            max_words=2000, # 设置最大现实的字数
            random_state=30, # 设置有多少种随机生成状态,即有多少种配色方案
            max_font_size=200, # 设置字体最大值
            )
    w.generate(cloud_data)
    # img_colors = wordcloud.ImageColorGenerator(backgroud_Image)
    # 字体颜色为背景图片的颜色
    # w.recolor(color_func=img_colors)

    # 显示词云图
    plt.imshow(w)
    # 是否显示x轴、y轴下标
    plt.axis('off')
    plt.show()
    # 获得模块所在的路径的
    d = path.dirname(__file__)
    w.to_file(path.join(d, "D:/词云.jpg"))

if __name__ == '__main__':
    createWordCloud(getPageInfo())

Original: https://blog.csdn.net/wanghongshuai1/article/details/125096105
Author: 编程小白菜123
Title: Python:物联网数据分析课程设计动态新闻标题热点挖掘

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/695124/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球