软件系统定制开发基于Python热点新闻关键词数据分析系统

温馨提示:文末有 CSDN 软件系统定制开发平台官方提供的博主 Wechat / QQ 名片 :)

1. 项目简介

        软件系统定制开发利用技术从某新闻网站软件系统定制开发爬取最新的新闻数据,软件系统定制开发并进行版块分类,对某篇版块下的所有新闻进行中文分词,保留表征能力强名词和动词作为关键词,并进行关键词词频统计,同时对新闻进行词云统计和词群分析。对不同版块的新闻热度进行统计分析。利用 flask 搭建后台,构建标准的 restful 接口,前端利用 bootstrap + echarts + jquery 调用后台接口,并进行前端的渲染可视化。

2. 功能组成

        基于Python社会热点新闻关键词数据分析系统的功能主要包括:

3. 新闻数据爬虫

        利用 Python 的 request + beautifulsoup 实现某新闻网站的新闻、娱乐、财经、体育、科技、汽车、女人、旅游、房产、教育、游戏等版块的最新新闻数据,完成数据清洗后存储到文件系统或数据库中。

  1. ......
  2. news_infoes = []
  3. # 分别爬取每个版块的热门新闻
  4. for category in all_categories_map:
  5. cate_url = all_categories_map[category]
  6. print('--> 爬取 {} 版块:{}'.format(category, cate_url))
  7. html = get_html(cate_url)
  8. soup = BeautifulSoup(html, 'lxml')
  9. items = soup.find_all('tr')
  10. news_title_set = set()
  11. for item in tqdm(items):
  12. try:
  13. tds = item.select('td')
  14. if len(tds) < 2:
  15. continue
  16. news_url = tds[0].a['href']
  17. news_soup = BeautifulSoup(get_html(news_url), 'lxml')
  18. if news_soup.title is None or news_soup.title.string.strip() == '':
  19. news_title = tds[0].a.text.strip()
  20. else:
  21. news_title = news_soup.title.string
  22. # 避免新闻爬取重复
  23. if news_title in news_title_set:
  24. continue
  25. news_title_set.add(news_title)
  26. click_count = int(tds[1].text.strip())
  27. news_info = {'category': category, 'title': news_title, 'url': news_url, 'click_count': click_count}
  28. news_infoes.append(news_info)
  29. if len(news_infoes) == 10:
  30. file_out.writelines([json.dumps(info, ensure_ascii=False) + '' for info in news_infoes])
  31. file_out.flush()
  32. news_infoes.clear()
  33. time.sleep(0.5)
  34. except:
  35. continue
  36. ......

4. 基于Python热点新闻关键词数据分析系统

4.1 系统注册登录

4.2 话题与词群分析

        通过对新闻关键词抽取、词频统计,并对多个关键词进行聚类形成词群:

  1. def news_words_analysis(category):
  2. ......
  3. word_count = {}
  4. for key_words in cate_df['title_cut']:
  5. for word in key_words:
  6. if word in word_count:
  7. word_count[word] += 1
  8. else:
  9. word_count[word] = 1
  10. wordclout_dict = sorted(word_count.items(), key=lambda d: d[1], reverse=True)
  11. wordclout_dict = [{"name": k[0], "value": k[1]} for k in wordclout_dict]
  12. # 选取 top10 的词作为话题词群
  13. top_keywords = [w['name'] for w in wordclout_dict[:10]][::-1]
  14. top_keyword_counts = [w['value'] for w in wordclout_dict[:10]][::-1]
  15. ......

4.3 新闻热度分析

        新闻热度主要依据每个版块的所有新闻的关注人数的分布情况,前端利用 echarts 和 ecStat 实现密度分布直方图的可视化:

  1. var dom = document.getElementById("main1");
  2. var myChart = echarts.init(dom);
  3. var app = {};
  4. option = null;
  5. var girth = data['click_counts'];
  6. var bins = ecStat.histogram(girth, 'scott');
  7. var interval;
  8. var min = Infinity;
  9. var max = -Infinity;
  10. var bins_data = echarts.util.map(bins.data, function (item, index) {
  11. var x0 = bins.bins[index].x0;
  12. var x1 = bins.bins[index].x1;
  13. interval = x1 - x0;
  14. min = Math.min(min, x0);
  15. max = Math.max(max, x1);
  16. return [x0, x1, item[1]];
  17. });
  18. function renderItem(params, api) {
  19. var yValue = api.value(2);
  20. var start = api.coord([api.value(0), yValue]);
  21. var size = api.size([api.value(1) - api.value(0), yValue]);
  22. var style = api.style();
  23. return {
  24. type: 'rect',
  25. shape: {
  26. x: start[0] + 1,
  27. y: start[1],
  28. width: size[0] - 2,
  29. height: size[1]
  30. },
  31. style: style
  32. };
  33. }
  34. option = {
  35. backgroundColor: '#F9F9F9',
  36. title: {
  37. text: key + '版块关注热度分布直方图(关注次数最大值' + data['max_click_count'] + ',最小值' + data['min_click_count'] + ')',
  38. left: 'center',
  39. top: 10
  40. },
  41. color: ['rgb(25, 183, 207)'],
  42. grid: {
  43. top: 80,
  44. containLabel: true
  45. },
  46. tooltip: {
  47. trigger: 'axis',
  48. axisPointer: {
  49. type: 'shadow'
  50. }
  51. },
  52. xAxis: [{
  53. type: 'value',
  54. min: min,
  55. max: max,
  56. interval: interval
  57. }],
  58. yAxis: [{
  59. type: 'value',
  60. }],
  61. series: [{
  62. name: '新闻个数',
  63. type: 'custom',
  64. renderItem: renderItem,
  65. label: {
  66. show: true,
  67. position: 'insideTop'
  68. },
  69. encode: {
  70. x: [0, 1],
  71. y: 2,
  72. tooltip: 2,
  73. label: 2
  74. },
  75. data: bins_data
  76. }]
  77. };
  78. if (option && typeof option === "object") {
  79. myChart.setOption(option, true);
  80. }

5. 总结

        本项目利用网络爬虫技术从某新闻网站爬取最新的新闻数据,并进行版块分类,对某篇版块下的所有新闻进行,保留表征能力强名词和动词作为关键词,并进行关键词词频统计,同时对新闻进行词云统计和词群分析。对不同版块的新闻热度进行统计分析。利用 flask 搭建后台,构建标准的 restful 接口,前端利用 bootstrap + echarts + jquery 调用后台接口,并进行前端的渲染可视化。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码

技术交流认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:



网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发