`
嚣张把刀
  • 浏览: 9528 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

如何使用Echarts将头条抓取结果以柱状图和饼形图展示?

阅读更多

如何使用Echarts将头条抓取结果以柱状图和饼形图展示?

后台框架:Spring+SpringMVC+Mybatis

表结构:

 

CREATE TABLE `article` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL COMMENT '文章名',
  `readcount` int(10) DEFAULT NULL COMMENT '阅读次数',
  `showimgcount` int(1) DEFAULT NULL COMMENT '图片展示数',
  `type` int(1) DEFAULT NULL COMMENT '类型:1-文章 2-图片 3-视频',
  `commentcount` int(255) DEFAULT NULL COMMENT '评论数量',
  `publishtime` timestamp NULL DEFAULT NULL COMMENT '发布时间',
  `gallerycount` int(10) DEFAULT NULL COMMENT '图片数量-只针对相集',
  `section` varchar(255) DEFAULT NULL COMMENT '领域',
  `tagword` varchar(255) DEFAULT NULL COMMENT '关键字',
  `author` int(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `t_s_index` (`type`,`section`)
)

 

 

编写查询语句:

 

<!--查询每个领域的平均阅读量-->
<select id="selectSection_avg" parameterType="map" resultType="Map">
	select a.section,avg(a.readcount) as readcount_avg,count(1) as section_count 
	from article a
	where a.section is not null and a.section != '' 
	group by a.section
	having count(1) > 100
</select>
<!--查询每个文章类型的平均阅读量-->
<select id="selectType_avg" parameterType="map" resultType="Map">
	select a.type,avg(a.readcount) as readcount_sum,count(1) as type_count 
	from article a
	group by a.type
</select>
<!--查询文章总量-->
<select id="selectArticleCount" parameterType="map" resultType="int">
	select count(1) 
	from article
</select>

 

 

此处省略dao层和service层的查询代码,只展示controller层的代码

@Autowired
private TouTiaoService touTiaoService;

@RequestMapping("/section")
public void section_avg(HttpServletResponse response){
    DataSourceContextHolder.setDbType(DataSourceType.DS_TOUTIAO);
    List<Map<String,Object>> list = touTiaoService.getSectionAvg();
    DataSourceContextHolder.setDbType(DataSourceType.DS_EASYWEB);
    PrintUtils.printMsg(response, list);
}

@RequestMapping("/type")
public void type_avg(HttpServletResponse response){
    DataSourceContextHolder.setDbType(DataSourceType.DS_TOUTIAO);
    List<Map<String,Object>> list = touTiaoService.getTypeAvg();
    DataSourceContextHolder.setDbType(DataSourceType.DS_EASYWEB);
    PrintUtils.printMsg(response, list);
}

 

编写页面

<div class="container">
    <div class="row">
        <div class="col-sm-12">
            <h3>
                本页统计数据来源于某头条,闲暇时刻写了一个爬虫,爬取头条的文章,只统计阅读量在1万以上的文章,并且单个类型下的文章数量大于100篇。
                共爬取<em id="author_count"></em>,<em id="article_count"></em>
            </h3>
        </div>
    </div>
    <hr />
    <div class="row">
        <div class="col-sm-6 col-xs-12 center" id="section_avg">
        
        </div>
        <div class="col-sm-6 col-xs-12 center" id="section_article">
        
        </div>
    </div>
    <div class="row">
        <div class="col-sm-6 col-xs-12 center" id="type_count">
        
        </div>
        <div class="col-sm-6 col-xs-12 center" id="type_avg">
        
        </div>
    </div>
</div>
<!--引入echarts的js文件-->
<script type="text/javascript" src="<%=JS_PATH%>echarts.min.js"></script>
<script type="text/javascript" src="<%=JS_PATH%>toutiao.js"></script>

 

toutiao.js代码:

$(function(){
	var section_avg = document.getElementById("section_avg");
	var section_article = document.getElementById("section_article");
	var type_count = document.getElementById("type_count");
	var type_avg = document.getElementById("type_avg");
	var section_avg_chart = echarts.init(section_avg);
	var section_article_chart = echarts.init(section_article);
	var type_count_chart = echarts.init(type_count);
	var type_avg_chart = echarts.init(type_avg);
	
	initSectionChart(section_avg_chart,section_article_chart);
	initTypeChart(type_count_chart,type_avg_chart);
});

function initSectionChart(chart,chart1){
	var option = {
	    legend: {
	        data:['各分类平均阅读量']
	    },
	    xAxis: [
	        {
	            type: 'category',
	            data: [],
	            axisLabel:{
	            	rotate:-90,
	            	interval:0
	            }
	        }
	    ],
	    yAxis: [
	        {
	            type: 'value',
	            name: '平均阅读量',
	            min: 0,
	            axisLabel: {
	                formatter: function(data){
	                	return data/10000+"万";
	                }
	            }
	        }
	    ],
	    series: [
	        {
	            name:'各分类平均阅读量',
	            type:'bar',
	            data:[]
	        }
	    ]
	};
	var option1 = {
		    legend: {
		        data:['各分类文章数量']
		    },
		    xAxis: [
		        {
		            type: 'category',
		            data: [],
		            axisLabel:{
		            	rotate:-90,
		            	interval:0
		            }
		        }
		    ],
		    yAxis: [
		        {
		            type: 'value',
		            name: '文章数量',
		            min: 0
		        }
		    ],
		    series: [
		        {
		            name:'各分类文章数量',
		            type:'bar',
		            data:[]
		        }
		    ]
		};
	$.ajax({
		url:BASE_PATH+'/toutiao/section.do',
		type:'get',
		dataType:'json',
		success:function(data){
			var sectionName = [];
			var section_avg_value = [];
			var section_count = [];
			for(var i = 0; i < data.length;i++){
				sectionName.push(data[i]['section']);
				section_avg_value.push(data[i]['readcount_avg']);
				section_count.push(data[i]['section_count']);
			}
			option.xAxis[0].data = sectionName;
			option.series[0].data = section_avg_value;
			chart.setOption(option);
			option1.xAxis[0].data = sectionName;
			option1.series[0].data = section_count;
			chart1.setOption(option1);
		}
	});
}

function initTypeChart(chart,chart1){
	var option = {
	    title : {
	        text: '不同文章类型阅读量比例',
	        x:'center'
	    },
	    legend: {
	        data: []
	    },
	    series : [
	        {
	            name: '不同文章类型阅读量比例',
	            type: 'pie',
	            data:[],
	            label: {
	                normal: {
	                    position: 'inner'
	                }
	            }
	        }
	    ]
	};
	var option1 = {
	    title : {
	        text: '不同文章类型文章数量比例',
	        x:'center'
	    },
	    legend: {
	        data: []
	    },
	    series : [
	        {
	            name: '不同文章类型文章数量比例',
	            type: 'pie',
	            data:[],
	            label: {
	                normal: {
	                    position: 'inner'
	                }
	            }
	        }
	    ]
	};
	$.ajax({
		url:BASE_PATH+'/toutiao/type.do',
		type:'get',
		dataType:'json',
		success:function(data){
			var typeName = [];
			var type_readcount = [];
			var type_count = [];
			var sum = 0;
			var count = 0;
			for(var i = 0; i < data.length;i++){
				var type_name = "";
				if(data[i]['type']==1){
					type_name = "文章";
				}
				if(data[i]['type']==2){
					type_name="图册";
				}
				if(data[i]['type']==3){
					type_name="视频";
				}
				type_readcount.push({"name":type_name+"\n平均阅读量:"+data[i]['readcount_sum'].toFixed(0),"value":data[i]['readcount_sum']});
				type_count.push({"name":type_name+"\n文章数量:"+data[i]['type_count'].toFixed(0),"value":data[i]['type_count']});
				sum += data[i]['readcount_sum'];
				count += data[i]['type_count'];
			}
			for(var i = 0;i < type_readcount.length; i++){
				type_readcount[i]['value'] = type_readcount[i]['value']/sum;
				type_count[i]['value'] = type_count[i]['value']/count;
			}
			option.series[0].data = type_readcount;
			chart.setOption(option);
			option1.series[0].data = type_count;
			chart1.setOption(option1);
		}
	});
}

 

演示页面:微儿博客

源码下载地址请访问 微儿博客源码分享

头条爬虫请访Java爬虫爬取今日头条文章,统计生成图表

分享到:
评论

相关推荐

    抓取 开发者头条 分享的所有文章

    6. **CSV文件操作**:展示如何使用Python的csv模块将抓取到的数据写入CSV文件。 7. **数据存储**:可能涉及到如何将数据存储到数据库,如SQLite或MySQL。 8. **实际应用**:可能通过一个完整的实例,演示如何从...

    分析AJAX抓取今日头条街拍美图

    抓取今日头条街拍图集

    nodejs抓取今日头条

    在本文中,我们将深入探讨如何使用Node.js来抓取今日头条的数据。Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,因其非阻塞I/O模型和轻量级特性,非常适合进行网络爬虫的开发。我们将主要关注以下几个方面...

    头条图集抓取——完整版python代码

    标题中的“头条图集抓取——完整版python代码”指的是使用Python编程语言来抓取今日头条网站上的图集数据。在互联网大数据时代,爬虫技术是获取网页信息的重要手段,尤其对于新闻聚合类平台如今日头条,其图集内容...

    Go-今日热榜是一个获取各大热门网站热门头条的聚合网站使用Go语言编写多协程异步快速抓取信息

    在“今日热榜”项目中,可能使用channels来传递抓取到的热门信息,确保数据的正确性和一致性。 4. **设计模式与最佳实践** - **错误处理**:Go语言鼓励显式的错误处理,项目中可能会使用多返回值或错误接口来捕获...

    PHPCMS v9新闻头条模块自动生成头条图片GBK版

    在使用"PHPCMS v9新闻头条模块自动生成头条图片GBK版"时,开发者和管理员可以利用这些特性来提升网站的新闻展示效果,吸引更多的用户,并增强用户黏性。同时,他们也需要关注系统维护、安全性和可扩展性,以确保系统...

    python学习抓取头条首页新闻

    学习Python3的demo,实现了抓取网页版今日头条新闻首页的内容,并解析输出到控制台,具体教程请移步博客:https://blog.csdn.net/xiaocy66/article/details/82829120

    uniapp-echarts.zip

    本文将深入探讨如何在uniapp项目中集成和使用ECharts。 一、uniapp介绍 uniapp是由DCloud(即5+ App)推出的一款基于Vue.js的多端开发框架,支持编写一次,发布到iOS、Android、Web(H5)、以及各种小程序(微信/...

    分析Ajax请求并抓取今日头条街拍美图

    分析Ajax请求并抓取今日头条街拍美图 weixin_30791095 于 2019-03-25 00:07:00 发布 65 收藏 版权 1.抓取索引页内容 利用requests请求目标站点,得到索引网页HTML代码,返回结果 2.抓取详情页内容 解析返回结果...

    微信小程序中使用ECharts 异步加载数据的方法

    ECharts 是一个基于JavaScript的数据可视化库,提供了许多种类型的图表,包括柱状图、折线图、饼图等等。ECharts 库提供了丰富的配置选项,用户可以根据需要自定义图表的样式和布局。 在微信小程序中使用ECharts ...

    精仿今日头条App趣头条App源码.zip

    2. **新闻资讯展示**:App的核心功能是展示各类新闻和咨询,这涉及到数据的抓取、存储和分发。数据可能来源于API接口,需要处理JSON或XML格式的数据流。 3. **后端系统**:“客户头条后端”可能包含服务器端的代码...

    根据关键词使用scrapy爬取今日头条网站新闻各类信息和内容页

    本项目是关于使用Scrapy爬虫框架抓取今日头条网站上与特定关键词相关的新闻信息和内容页面。Scrapy是一个强大的Python爬虫框架,适用于构建复杂的爬虫项目,能够高效地处理网络请求、解析HTML内容以及管理爬取的数据...

    今日头条Ajax美女图片爬取 - 爬虫进阶实战(完整版)

    在本教程中,我们将深入探讨如何使用Python进行Ajax爬虫,以获取今日头条网站上的美女图片资源。Ajax(Asynchronous JavaScript and XML)是一种网页开发技术,它允许网页在不重新加载整个页面的情况下与服务器交换...

    今日头条 新闻频道展示

    在Android开发中,"今日头条 新闻频道展示"的实现涉及到两个关键组件:HorizontalScrollView和ViewPager。这两个组件都是Android SDK提供的重要视图容器,用于展示大量的数据并实现滑动浏览的效果。 ...

    仿今日头条小程序样式和少部分功能。【新闻列表残缺版】

    - **卡片式展示**:今日头条的新闻通常以卡片形式呈现,我们可以使用`&lt;view&gt;`标签创建卡片容器,内含标题、摘要和图片等组件,通过CSS布局实现卡片间的间隔和动画效果。 - **滚动效果**:为了模拟新闻列表的滚动...

    高仿今日头条实现

    这个项目可能包括了模仿今日头条的主要功能和界面设计,旨在提供类似的用户体验,让用户能够浏览新闻、视频,并进行上下刷新操作,以获取最新的内容。 【描述】:“上下刷新,查看详情,以及视频优化”是这个高仿...

    仿头条图片查看器

    【仿头条图片查看器】是一款针对安卓客户端开发的图片浏览应用源码,旨在提供类似今日头条的用户体验,让用户能够轻松地查看和浏览手机中的图片。在移动应用开发领域,图片查看功能是一个不可或缺的部分,尤其在社交...

    类似今日头条界面UI源码

    - **数据加载和展示**:今日头条UI通常需要实时更新的内容,所以可能涉及到网络请求(如使用Retrofit或OkHttp)、数据解析(如Gson或Jackson)和ListView或RecyclerView的使用,以展示数据列表。 - **用户体验设计*...

Global site tag (gtag.js) - Google Analytics