mkdir -p /data/onenav && cd /data/onenav docker run -d --name="onenav" -p 9680:80 \ --restart always \ -e USER='onenav' -e PASSWORD='LH2Gk' \ -v /data/onenav:/data/wwwroot/default/data \ helloz/onenav docker logs -f onenav
十分感谢大家的点赞和关注。其实,这是我第一次在掘金
上写文章。因为我也是前段时间偶然之间才开始了解和学习爬虫,而且学习node的时间也不是很长。虽然用node做过一些后端的项目,但其实在node和爬虫方面我还是一个新人,这篇文章主要是想和大家分享一下node和爬虫方面的基本知识,希望对大家有帮助,也想和大家一起交流,一起学习,再次谢谢大家的支持!
对了,我开通了个人的 GitHub主页,里面有自己的技术文章,还会有个人的随想、思考和日志。以后所有的文章都会第一时间更新到这里,然后同步到其他平台。有喜欢的朋友可以没事去逛逛,再次感谢大家的支持!
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF
社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
WIKIPEDIA 爬虫介绍
爬行对象从一些 种子URL
扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。
是 指选择性
地爬行那些与预先定义好的主题相关页面的网络爬虫。
指对已下载网页采取增量式更新和 只爬行新产生的或者已经发生变化网页
的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。
爬行对象是一些在用户填入关键字搜索或登录后才能访问到的深层网页信息
的爬虫。
深度优先策略、广度优先策略
基于内容评价的爬行策略(内容相关性),基于链接结构评价的爬行策略、基于增强学习的爬行策略(链接重要性),基于语境图的爬行策略(距离,图论中两节点间边的权重)
统一更新法、个体更新法、基于分类的更新法、自适应调频更新法
Deep Web 爬虫爬行过程中最重要部分就是表单填写,包含两种类型:基于领域知识的表单填写、基于网页结构分析的表单填写
现代的网页爬虫的行为通常是四种策略组合的结果:
选择策略:决定所要下载的页面;
重新访问策略:决定什么时候检查页面的更新变化;
平衡礼貌策略:指出怎样避免站点超载;
并行策略:指出怎么协同达到分布式抓取的效果;
多个安装宝塔面板的服务器,经常遇到计划任务中的Let's Encrypt证书自动续签失败,单独手动续签却能正确下发证书的问题,查阅相关资料后,得出以下解决方案:
/www/server/panel/vhost/ssl
,如遇到提示自动续签失败的项目,可将此目录下面的对应的域名目录删掉。/www/server/panel/vhost/cert/
,找到已经不需要SSL证书的网站名,删除对应目录。做完以上两部之后再执行续签操作,就不会再出错了。
如果还不能正常续签,删除续签计划任务,重新添加计划任务后再执行续签。
计划任务内容为:
续签Let's Encrypt证书
每天0点10分执行
/www/server/panel/pyenv/bin/python -u /www/server/panel/class/acme_v2.py --renew=1
直接打开浏览器控制台,输入以下脚本:
function downloadPages(from, to) { for (i = from; i <= to; i++) { const pageCanvas = document.getElementById('page_' + i); if (pageCanvas === null) { break; } const pageNo = parseInt(String(i)); setTimeout(() => { console.log("==pageNo==>>", pageNo); ((num) => { console.log("开始打印第" + num + "页"); pageCanvas.toBlob( blob => { const anchor = document.createElement('a'); anchor.download = 'page_' + num + '.png'; anchor.href = URL.createObjectURL(blob); anchor.click(); URL.revokeObjectURL(anchor.href); } ); })(pageNo); }, 500 * pageNo); } }
downloadPages(page_from, page_to);
例如打印第3~5页即输入downloadPages(3, 5);
关于 HCL 颜色的介绍, 以前在有个文章里看到过:
产品配色2.0:使用HCL 色彩空间替代HSL 生成配色- 二三事
以前关于 HSL 的介绍, 说的是 HSL 比 RGB 更符合人们的视觉,
https://cdc.tencent.com/2011/05/09/色生心中:人性化的HSL模型/
由于 HSL 的几个数值是色相/饱和度/亮度, 容易增减来调色,
可是按照开头的 HCL 文章介绍, HSL 颜色也存在问题,git
为了清楚展现问题, 我作了一个工具来展现色环 http://tools.mvc-works.org/color-ring/
其中 HSL 模式, S 取, 100, L 取 61, 效果看起来是这样,
能够看到黄色的区域很是亮, 蓝色就显得比较暗.github
固然这个颜色也是合理的, 蓝色原本就是不耀眼的一种颜色.
HSL 跟直接跟 RGB 颜色对应的, 对应到蓝色的像素的亮度.
用 HSL 的话, 生成颜色也算比较方便, 改变其中一个参数就好.web
不过, HCL 认为, HSL 的亮度 L 其实有问题,
当 L 颜色一致的时候, 颜色的亮度应该是基本一致的,
也就是蓝色对应的统一个 L, 在相对的区域, 颜色的亮度应该大致一致,
用 HCL 渲染出来 L=61 就是这样子, 固然黄色已经看不到了,npm
若是要从 HCL 当中显示黄色, 我调了一下, L 须要调整到 91,
这个时候蓝色的区域也被提高得很亮, 是接近白色的浅蓝色了,mvc
若是是 HSL 当中 L=91, 看一下效果, 这些颜色已经都接近白色了,工具
这也包含了 HCL 的一个区别, 就是 L=100 对应的并非白色,
在 HCL 当中 C=0, L=100 才能调出白色.spa
当前 demo 实现参考 https://github.com/worktools/color-ring
颜色基色使用的是 https://www.npmjs.com/package/d3-color
d3.hcl(h, c, l_[, opacity])
能够比较快的建立一个 HSL 颜色, 而后再转换到其余的颜色格式,code
color.formatHex() color.formatRgb() color.formatHsl()
另外一个模块还有 chroma-js, 也能够进行转换, 可是我这边没有深刻用.
初步感
本文探讨如何零基础创建一套完整的颜色规范体系。我们将原理掰开来讲,梳理了实现步骤使其清晰明确易上手,即便没有相关经验,遵循这套方法也能为产品创建一套优质的颜色规范系统。
设计系统三大元素(色彩、字体和图形)中,色彩是非常重要的一环。产品设计中,我们需要定义好系统的色彩架构体系,建立完成后,所有的设计都将围绕着这些色彩进行。定义色彩之前,有一些概念需要提前了解,他们会在定义过程中用到,比如深入了解 HSB 颜色模式的原理和细节,以及由此推导出来的颜色定义方法,再如邻近色和对比色等概念梳理。了解了原理才能更得心应手。
RGB 色彩模式是以颜色发光的原理来设计的,当红光(Red)、绿光(Green)和蓝光(Blue)相互叠合时,色彩相混,亮度相加,是显示器的默认色彩模式,但对人来说并不直观,即便获取对应的 RGB 值也很难想象对应的色彩。相比之下,HSB(Hue 色相、Saturation 饱和度、Brightness 明度)色彩模式更易于理解,使用时能够获得更明确的预期。HSB 也称 HSV(Hue 色相、Saturation 饱和度、Value 值)。
HSB 颜色模式中的 H 指色相(Hue),色值处于 0° 到 360° 之间,即为颜色在色环中的位置。
S 指饱和度(Saturation),值处于 0 到 100 之间,100 为最饱和的颜色,0 为完全没有颜色的灰色;
B 为亮度(Brightness),值处于 0 到 100 之间,值为 0 时颜色为黑色(无论色相和饱和度为多少),值为 100,同时饱和度为 0 时,颜色才为白色,否则会呈现为非常亮的有彩色。
为什么 Brightness 的值会这么表现?我们可以把其想象为一个密闭房间里的灯泡,值为 0 时即为灯关掉了,此时没有光源,无论色相和饱和度怎么变化,都没有光的反射,所以最终的结果呈现为黑色;当值变大时即为灯泡发光强度变大,值为 100 时灯泡亮度达到峰值,此时若颜色的饱和度不为零,即为强光照射在有色物体身上,颜色属性并不会消失。
另外一个重要的点是在 HSB 中黑色和白色并不是对立的存在,想一下我们怎么在取色器中获取白色:将选取框向左上角移动,即为减小其饱和度的同时增大亮度。而黑色是怎么获得呢?只需将选取框向下拉到底,即为将亮度降到最低,不用改变色相和饱和度。
对于一套图标来说,能让用户记得住,源于图标的与众不同;而能让用户觉得有专业感,其实是源于图标的整齐划一。图标设计本身也有自己一套规范,在设计图标的过程中遵循一定规范去工作,不仅可以使图标看起来更美观,而且还可以体现出设计师的专业和价值。作者在本文中以1024px下的设计规范给出详细的说明和解释,欢迎大家讨论。
很多设计平台都推荐设计师在 1024 X 1024px 的网格中绘制组件,且圆角的大小保持 8 的倍数关系。例如 Ant Design 给出的图标绘制网格规定:
关于图标设计,你大概也有思考过这样的问题:
对于这类问题,本文解答如下 ——
下面这张图你可以很清楚的看到网格的用法:图中放大的圆圈中的一个蓝色的小方格是 32 X 32 px,也就是说,这个蓝色小方格里面还是一个 32 X 32 的格子盘:
你可以想象,当你在绘制一个图标时,其实是在一个布满了小格子的纸上进行绘制,这样做我们在绘制图标的时候可以很精确,每一个圆角的大小、每一根线条的粗细、每一个斜线的角度等等,都有严格的数量规范,以确保图标造型的统一和精确。
关于图标的精确规范,我们以 Ant Design 的图标系统中的部分细节规范为例:
(1)圆角:
圆角的规格采取 8 的倍数原则,最常用的尺寸是 3 种,分别是 8px、16px、32px,它们之间是两倍数的关系。而图标内部空间的圆角则保持直角(0px)的处理方式。
(2)点的直径:
点是非常常用的元素。Ant Design 对于点的尺寸选择上会保持 16 的倍数这一原则。在点的选择中常用四种尺寸,分别为 80px、96px、112px、128px。当出现特殊尺寸的需求时,会按照 16 的倍数进行延展。
(3)线宽:
Ant Design 的线条宽度之间的关系采用 8 倍数原则,从小到大以 8 的规律递增。常用的规格也是 4 种,分别为 56px、64px、72px、80px。
你会发现,在 16 X 16px 的画板中肯定是可以画出来图标的,只是图标的形状并不是单一的圆形或是方形,一旦出现多种样式的线和点,你是无法精确控制绘制的规律的。
当然,1024px 也