有些时候,我们饼状图中echarts的数据可能会很多。
这个时候展示肯定会密密麻麻的。导致显示很凌乱
我们需要\'翻页\'类似表格展示下一页的数据
在legend中下需要配置属性 type: \'scroll\',表示滚动
数据太多可以滚动的形式进展示
如下:
legend: {
type: \'scroll\',
}
但是我们发现这个分页箭头不好看。
所以我们需要优化这个分页的箭头
通过官网的描述信息我们配置如下这只
这里设置箭头的路径
var option={
legend: {
type: \'scroll\', 滚动
orient: \'vertical\', 垂直方向滚动
pageIcons: {
vertical: [
\'path://M472.064 272.448l-399.232 399.232c-22.08 22.08-22.08 57.792 0 79.872 22.016 22.016 57.792 22.08 79.872 0L512 392.256l359.296 359.296c22.016 22.016 57.792 22.08 79.872 0 22.08-22.08 22.016-57.792 0-79.872L551.936 272.448C529.856 250.432 494.144 250.432 472.064 272.448z\',
\'path://M472.064 751.552 72.832 352.32c-22.08-22.08-22.08-57.792 0-79.872 22.016-22.016 57.792-22.08 79.872 0L512 631.744l359.296-359.296c22.016-22.016 57.792-22.08 79.872 0 22.08 22.08 22.016 57.792 0 79.872l-399.232 399.232C529.856 773.568 494.144 773.568 472.064 751.552z\',
],
},
pageButtonPosition: \'end\', // 翻页的位置。\'start\':控制块在左或上,end控制块在右或下。
pageIconColor: \'#29bca8\', // 可以点击的翻页按钮颜色
pageIconInactiveColor: \'#7f7f7f\', // 禁用的按钮颜色
pageIconSize: 14, //这当然就是按钮的大小
}
}
有的小伙伴会好奇
path得值怎么来的,我是从svg中获取的,
第1种:svg的代码,就是我刚刚使用的
第2种:URL为图片链接例如:\'image://http://xxx.xxx.xxx/a/b.png\'
第3种:URL为dataURI 例如:
\'image://data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUh
wFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7\'
在legend下有一个formatter属性
我们可以通过 formatter 来自定义文字
formatter: function(name) {
let showNum
let percentage
for (var i=0; i < listSummary.length; i++) {
if (listSummary[i].name==name) {
showNum=listSummary[i].value
if (lejibaoxiuTotals) { //lejibaoxiuTotals可能为0
// 计算百分比
percentage=((listSummary[i].value /lejibaoxiuTotals) *100).toFixed(2) + \'%\'
} else {
percentage=\'\'
}
}
}
return `{name| ${ name.length > 5 ? name.slice(0, 5) + \'...\' : name}}
| {val| ${percentage}} {numNum| ${showNum}}`
},
通过富文本来控制样式
textStyle: {
fontSize: 13, //字体的大小
color: \'#D9D9D9\',
rich: {
//设置name属性的样式(显示的:华为x),这里与 return中的name保持一致
name: {
color: \'#595959\',
width: 77, //宽度
padding: [0, 0, 0, 0], //间距表示 上右下左
},
//设置val(百分比)属性的样式,这里与 return中的val保持一致
val: {
width: 50,//宽度
color: \'#8c8c8c\', 、
padding: [0, 10, 0, 6], //间距表示 上右下左
},
//设置numNum(数量)属性的样式,这里与 return中的numNum保持一致
numNum: {
color: \'#8c8c8c\',
},
},
},
这样就好看一些了
是简易数据分析系列的第 10 篇文章。
原文首发于博客园:简易数据分析 10。
友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍。
我们在刷朋友圈刷微博的时候,总会强调一个『刷』字,因为看动态的时候,当把内容拉到屏幕末尾的时候,APP 就会自动加载下一页的数据,从体验上来看,数据会源源不断的加载出来,永远没有尽头。
我们今天就是要讲讲,如何利用 Web Scraper 抓取滚动到底翻页的网页。
今天我们的练手网站是知乎数据分析模块的精华帖,网址为:
https://www.zhihu.com/topic/19559424/top-answers
这次要抓取的内容是精华帖的标题、答题人和赞同数。下面是今天的教程。
刚开始我们要先创建一个 container,包含要抓取的三类数据,为了实现滚动到底加载数据的功能,我们把 container 的 Type 选为 Element scroll down,就是滚动到网页底部加载数据的意思。
在这个案例里,选择的元素名字为 div.List-item。
为了复习上一节通过数据编号控制条数的方法,我们在元素名后加个 nth-of-type(-n+100),暂时只抓取前 100 条数据。
然后我们保存 container 这个节点,并在这个节点下选择要抓取的三个数据类型。
首先是标题,我们取名为 title,选择的元素名为 [itemprop='zhihu:question'] a:
然后是答题人名字 name 与 赞同数 like,选择的元素名分别为 #Popover10-toggle a 和 button.VoteButton--up:
元素都选择好了,我们按 Sitemap zhihu_top_answers -> Scrape -> Start craping 的路径进行数据抓取,等待十几秒结果出来后,内容却让我们傻了眼:
数据呢?我要抓的数据呢?怎么全变成了 null?
在计算机领域里,null 一般表示空值,表示啥都没有,放在 Web Scraper 里,就表示没有抓取到数据。
我们可以回想一下,网页上的的确确存在数据,我们在整个的操作过程中,唯一的变数就是选择元素这个操作上。所以,肯定是我们选择元素时出错了,导致内容匹配上出了问题,无法正常抓取数据。要解决这个问题,我们就要查看一下网页的构成。
查看一下网页的构成,就要用浏览器的另一个功能了,那就是选择查看元素。
1.我们点击控制面板左上角的箭头,这时候箭头颜色会变蓝。
2.然后我们把鼠标移动到标题上,标题会被一个蓝色的半透明遮罩盖住。
3.我们再点击一下标题,会发现我们会跳转到 Elements 这个子面板,内容是一些花花绿绿看不大懂的代码
做到这里心里别发怵,这些 HTML 代码不涉及什么逻辑,在网页里就是个骨架,提供一些排版的作用。如果你平常用 markdown 写作,就可以把 HTML 理解为功能更复杂的 markdown。
结合 HTML 代码,我们先看看 [itemprop='zhihu:question'] a 这个匹配规则是怎么回事。
首先这是个树形的结构:
<h2 class='ContentItem-title'/> <div itemprop='zhihu:question'/> <a>如何快速成为数据分析师?</a> </div> </h2>
我们再分析一个抓取标题为 null 的标题 HTML 代码。
我们可以很清楚的观察到,在这个标题的代码里,少了名为 div 属性为 itemprop='zhihu:question' 的标签!这样导致我们的匹配规则匹配时找不到对应标签,Web Scraper 就会放弃匹配,认为找不到对应内容,所以就变成 null 了。
找到原因后我们就好解决问题了。
4.解决问题
我们发现,选择标题时,无论标题的嵌套关系怎么变,总有一个标签不变,那就是包裹在最外层的,属性名为 class='ContentItem-title' 的 h2 标签。我们如果能直接选择 h2 标签,不就可以完美匹配标题内容了吗?
逻辑上理清了关系,我们如何用 Web Scraper 操作?这时我们就可以用上一篇文章介绍的内容,利用键盘 P 键选择元素的父节点:
放在今天的课程里,我们点击两次 P 键,就可以匹配到标题的父标签 h2 (或 h2.ContentItem-title):
以此类推,因为答题人名字也出现了 null,我们分析了 HTML 结构后选择名字的父标签 span.AuthorInfo-name,具体的分析操作和上面差不多,大家可以尝试一下。
我的三个子内容的选择器如下,可以作为一个参考:
最后我们点击 Scrape 爬取数据,检查一下结果,没有出现 null,完美!
爬取知乎数据时,我们会发现滚动加载数据那一块儿很快就做完了,在元素匹配那里却花了很多时间。
这间接的说明,知乎这个网站从代码角度上分析,写的还是比较烂的。
如果你爬取的网站多了,就会发现大部分的网页结构都是比较「随心所欲」的。所以在正式抓取数据前,经常要先做小规模的尝试,比如说先抓取 20 条,看看数据有没有问题。没问题后再加大规模正式抓取,这样做一定程度上可以减少返工时间。
这期内容比较多,大家可以多看几遍消化一下,下期我们说些简单的内容,讲讲如何抓取表格内容。
简易数据分析 09 | Web Scraper 自动控制抓取数量 & Web Scraper 父子选择器
简易数据分析 08 | Web Scraper 翻页——点击「更多按钮」翻页
众所周知,word、excel、ppt 和 pdf 文件在线预览有很多解决方案,但大多无法播放 ppt 动画,或者功能非常单一。这不,最近产品经理闭关修炼三天,提出了如下需求:
今天就给大家介绍一下几种主流的文档预览方案,有免费,有收费的,希望对大家有所帮助。
调用微软的 office 在线预览服务,用法也比较简单:
http://view.officeapps.live.com/op/view.aspx?src=文件地址优点是免费,可以实现 ppt 动画播放;缺点就是没有扩展性,无法实现其他功能。
官方示例:
https://www.microsoft.com/en-us/microsoft-365/blog/2013/04/10/office-web-viewer-view-office-documents-in-a-browser/?eu=true
百度文档服务是将文件上传至百度服务器,进行转码,转码成功之后会拿到一个 docId,根据 docId 预览不同的文件。在控制台中上传文档,然后复制以下代码,替换docId,即可在浏览器中预览。
<div id="reader"></div>
<script src="http://static.bcedocument.com/reader/v2/doc_reader_v2.js"></script>
<script type="text/javascript">
(function () {
var option={
docId: "doc-xxxxxx",
token: "TOKEN",
host: "BCEDOC",
width: 800, // 文档容器宽度
pn: 2, // 定位到第几页,可选
ready: function (handler) { // 设置字体大小和颜色, 背景颜色(可设置白天黑夜模式)
handler.setFontSize(1);
handler.setBackgroundColor("#000");
handler.setFontColor("#fff");
},
flip: function (data) { // 翻页时回调函数, 可供客户进行统计等
console.log(data.pn);
},
fontSize: "big",
toolbarConf: {
page: true, // 上下翻页箭头图标
pagenum: true, // 几分之几页
full: false, // 是否显示全屏图标,点击后全屏
copy: true, // 是否可以复制文档内容
position: "center" // 设置 toolbar中翻页和放大图标的位置(值有left/center)
} //文档顶部工具条配置对象,必选
};
new Document("reader", option);
})();
</script>可以看到百度文档的配置还是挺多的,文档转图片、监听翻页都不是问题,不过缺点就是 ppt 动画播放不了。
官方网址:
https://cloud.baidu.com/product/doc.html
永中的功能还是很强大的,分为私有云和公有云,私有云就是部署在自己的服务器上,公有云就是用永中的服务器。公有云有免费版,可以实现基本的预览功能。私有云支持定制,上述功能基本都可以实现。
官网上有很多示例,大家也可以把自己的文件上传上去,预览体验一下。
官方示例:
https://www.yozodcs.com/page/example.html
office web 365 和永中 DCS 类似,也有部署版和在线版,不过部署版和在线版功能都非常强大,满足你对文档预览的所有幻想。
office web 365 也有免费版,使用方法很简单,先注册账号登录,然后把文件下载地址所在的域名添加到后台,后台会根据域名生成一个网站 ID,然后再使用下面的预览地址就可以了。
预览地址:
http://ow365.cn/?i=您的网站ID&furl=要预览的Office文件下载地址如果文件下载地址是 https 开头,那么还要加一个 ssl=1 参数:
http://ow365.cn/?ssl=1&i=您的网站ID&furl=要预览的Office文件下载地址官方示例:
https://officeweb365.com/Default/Viewview
以上就是最主流的文档预览方案,如果产品经理再让你开发这些功能,知道怎么做了吧。只要有 money,就没有实现不了的功能 下面来做个小小的总结:
功能 | 微软 Office Web Viewer | 百度文档服务 DOC | 永中 DCS | Office Web |
监听文档翻页 | ? | ? | ? | ? |
文档转图片 | ? | ? | ? | ? |
ppt动画 | ? | ? | ? | ? |
ppt同步播放 | ? | ? | ? | ? |
ppt画板 | ? | ? | ? | ? |
以上内容本人花了大量时间调研、尝试,如果对你有所帮助,不要忘了点个赞再走呦~
有问题欢迎评论区留言~
*请认真填写需求信息,我们会在24小时内与您取得联系。