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页的内容,连接成功并成功读出该页面所有信息。

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

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

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

 

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

  • 词云制作调试

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

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

 

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

 

图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())
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白菜123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值