• 近阶段的总结


          好长时间没有更新博客了,昨天在近期的工作即将告一段落之际,感觉不太好,这段时间都在输出,输入的不太多,是时候总结一下了;

          这段时间用nodejs做了一个爬虫系统,获取了凤凰网的日本频道的资讯;用apiclould给公司的一款产品做了升级换代,主要完成了这俩项工作,下面我将碰到的问题,总结一下,一一罗列出来:

          1、爬虫系统

               1>做这个系统的时候,首先碰到的问题就是,现在要做爬虫么,爬虫怎么做,就是从一个链接里面的到内容么,但是链接怎么来呢,日本频道,这个比较特殊,在pc端没有这个频道,只有在app上才有,通过公司的同事才知道,有一种工具叫app抓包工具,专门获取app请求的各种信息,我经过很多筛选,最终选择了charles,这款软件相对来说还是比较好用的,就是在当初链接手机的时候出了一些问题,后来才知道,是公司的网有问题,回家一次行通过,关于这个东西怎么用,我记得我转载过一个人的博客,它上面做了非常详细的介绍,我今天在转载一次,唐巧的博客,可以说是大神了,我看了之后受益匪浅,在看完charles相关的内容后,我有又去他的博客主页上,有信看到了另一篇让我受益匪浅的博客,这是一篇教很多人该怎么问问题的帖子,我认为写的相当好,这对于我来说也是相当的关键,我刚刚入行不到一年时间,经常会碰到各种各样的问题,经常面临着各种各样的请教,我请教别人,别人有时候也会请教我,但是这之间的礼仪问题,我自认为做的很到位了,但是当我读完那篇文章,我觉得我还是差了些,大家如果有兴趣的话,可以读一下,链接:如何请教问题,说的有点远了,我通过这个软件迅速的得到了凤凰网日本专栏的请求地址,

               2>得到了地址,下一步就开始用nodejs获取内容了,怎么获取呢,当然是request包了,request有三个参数,err,head,body,      body 这个参数就是该链接所请求到的东西了,但是我从那个链接请求到不是直接的html结构的字符串,而是一个对象,object,首先是,将object用JSON.parse(object),将这个对象转化成json 格式的字符串,然后呢,在用循环,即遍历将其中的数据都得到,我记得是item,每一条新闻,就是一个item,里面包含了文章的ID,图片的ID,文章的title,缩略图,来源,时间,详情页的链接,以及包含的图片,等等好多内容,然后就用     对象.属性    ,一个一个循环出来,数据循环出来了,怎么整呢,当然是存储了,怎么存呢,nodejs怎么链接数据库呢,我用的mysql哈,所以用的当然就是mysql这个包了,这个包 用npm install可以搞定,她的使用方法也可以上npm 的官网搜索mysql然后仔细研读,其实很简单的,我总结了一下不管是什么语言,链接数据库的时候,都是{host : "localhost";user : 'root',password : ''"database:"数据库的名字"}就这几条,链接好数据库之后就是组织sql语句了,这里用的简单的插入 。 insert into 表名 (title,con,cid)values ('${obj.title}','${obj.con}','${obj.cid}';)

    这就将简单的信息存储到一张表中了,但是现在明显还不行,我需要获取到每篇文章的详细内容,所以对的到的cid进行第二次请求,这个呢就设计到了nodejs的一个异步机制,为了让一条完了再来另一条,就用到了async 这个包,和mysql一样,可以通过npm install 的到,这就基本搞好了框架,第一次请求完成的时候,再请求第二次,即请求第一次的到的cid,这就涉及到了数据的传递,我这里用的是回调函数callback()的传递,然后进行第二次请求,请求的时候可以用async的each这是nodejs提供的循环方式,然后再继续重复第一次的获取,存储工作,这就将需要的数据存储到了数据库,但是我们公司的后台说,他是要一个地址,就是开启一个服务之后,可以通过一个地址获取到json格式的数据,就像我最开始请求的那样,一大堆json格式的数据,我这个继续,如何将数据哭的内容,放到一个页面里呢,我是这么考虑的,我现在数据库中的数据,我先在存储结束之后,用一个select语句将所有的内容取出来,然后怎么弄呢,这个问题困扰了我挺长时间,最后是想起了,我得到的是很多个对象,每一条数据就是一个对象,我在回调函数中将得到的对象,首先还是JSON.parse(object),弄成字符串,然后通过nodejs的流,将这个数据写入了一个临时的中间文件,即用fs包的fs.writefile('data.txt','utf8');注意这里必须注明你编码的格式,我看文档是说,默认是utf8,但是实际上不行,我的后台,打开之后,都是乱码 ,所以这里必须注明编码格式,写入之后,这就改用一个端口号,监听这个文件了,即data.txt,我上网查了下,刚好有,代码截图如下:

    就是将这段代码运行起来,我监听的是8887端口,然后再浏览器地址栏输入“localhost:8887”。会车,直接就看到了一堆json格式的数据,

    至此我的爬虫系统就算是完善了,对了写到这儿,想起一个问题,还的提一下,我是用的cron这个自动化的包,让他自己运行,每个一个具体的时间,就执行一次所有的代码,即获取一次内容,完事儿,就到这儿了,如果有对这个系统感兴趣的,可以去我的github上去看;地址:爬虫系统

           2、我们公司产品的升级,这个 可是纯前端的内容,首先是ui给我设计稿,我大概做了3-4天时间,写完了所有的页面,但是在布局的时候,我之前的同事写的时候,用的是百分比,去适应各种屏幕,我想用比较牛逼的rem,但是就碰到了挺多的问题,

                  1>先说我用了部分mui组件,比如头部,header,但是用这个组件,问题也是蛮多的,首先是button,头部左右俩端经常会出现一些或是有文字的,或是有图标的button,按下的时候,总是显示一个蓝色的边框,还有就是,文字渐变为蓝色,真是讨厌到爆炸,我后来慢慢的想,这不就是一个样式么,直接改mui.css,打开浏览器的检查页面,得到该元素的控制属性,看色的边框是因为有mui-btn-blue这个类名,逐渐变蓝可以设置,mui-btn的active状态,当按下的时候,让他的颜色也相同就完事了,如果改了属性,不起作用的话,可能是优先级不够高,把她的父元素在加上即可,

                  2>碰到了iconfont的彩色图标的引用当时应用的时候挺简单的,这次怎么就不行了呢,仔细检查,仔细检查,再仔细检查,突然发现需要引入的confront.js文件是这么引入的      <link rel="stylesheet" type="text/css" href="../iconfont.js">     ,我当时这个生气啊,怎么能犯这么低级的错误呢,这是搞笑,js文件的引入,一定要记住,要用script标签对,

                  3>rem布局,我刚开始做的时候,是兼容的宽750px,事实证明这个问题挺严重的,当你兼容了宽,那么部分显示内容较多的页面即高度较大的页面的现实就出问题了,在部分手机上根本看不见底部,以后在做类似的移动端的页面时候,一定要首先兼容高度,这样会稍微好一些,后期出现的问题,也会少一些;

                  4>我用rem布局的时候,碰到边框的时候,一般咱们不是都 是设置1px么,我就想当然的写了0.01rem;但是边做边检查,怎么就显示不了呢,搞的好像是border不能见人一样,后来查啊查啊,终于找到了一篇文章,是说有些时候0.01rem小于1px;当小于的时候,自然就看不到了,应为屏幕显示不了比1px还小的内容,

    最后,我把所有的0.01,都加大到0.03rem,终于好了,问题解决

                  5>swiper在应用的时候,要注意了,我们有时候需要将轮播点,放到轮播图的外部,但是swiper本身,是overflow:hidden的,所以如果想到外面的,先把,轮播点父元素的overflow:hidden属性去掉,然后就一切ok;

                  6>在一个活动效果中,想要实现必须让客户按照一定的顺序填写内容,那么可以模拟轮播点的点击事件,比如说,有四张轮播图,每一张轮播图都可以点击,每一个点击进去都是一个不同的页面,我们想让客户从一张依次填写到第四张,怎么搞,第一次进入页面的时候,给一个值1,此时只可以点击进入第一章图,点击第二张图的时候,会有一个判断,条件不满足,模拟点击第一个轮播点的效果,让轮播图自动回到第一个页面,怎么模拟呢,就是下面这行代码,

    $(".swiper-pagination span").eq(trigger_btn-1).trigger("click");

    其中的trigger_btn是一个变量,要模拟点击第几张,就将这个数字填到eq()中,后面是模拟的点击事件,这样就实现了一个条件不满足的时候,返回到指定轮播页的效果,

                  7>其他的一些比如说点击获取位置、图片的长按下载、获取联系人信息,获取摄像头,相册、芝麻分认证、手机运营商认证、这些都是有接口的,调用一下,还是比较容易的,

            今天,目前只能想到这么多了,以后想起什么来,在补充。

     
  • 相关阅读:
    Windows出现BOOTBCD错误的解决办法
    解决真机调试时Eclipse DDMS上打不开/data目录的问题
    解决魅族MX5卸载debug-app不干净,导致安装、升级不成功的问题
    iOS10 相机相册等权限的使用、检测并引导用户开启权限
    python脚本后台执行
    CentOS 6.8 安装 Python3
    Virtualenv教程
    Linux路由表
    python websocket-client connection
    RESTful API 设计指南
  • 原文地址:https://www.cnblogs.com/boboweiqi/p/6682411.html
Copyright © 2020-2023  润新知