使用 websocket 显示下载图片的细节

原创 tianxiaofeng747 随笔 技术 440阅读 2018-07-15 19:02:06 举报

本文继续上一章内容
现在我们只是实现了下载固定页面的所有子页面的图片,功能还很粗糙,比如:
1:页面啥都看不到,总共有多少页面,多少图片我都不清楚,下载进度如何了?
2:来回就下载一个页面,如果能动态点就好了,比如搜什么,下载什么。
好,我们就脑补下接下来怎么办?
第一条,我们可以使用 websocket 相关技术,让浏览器和服务器通信,让相关信息显示在浏览器上,这样用户体验会好点。
第二条,我们可以通过输入点什么,传到后端,然后让它根据我输入的关键词爬取。
关键技术点:
https://socket.io/
这个是node 的一个工具包, 就是解决浏览器和 服务器之间 实时通信的问题。用这个工具我们可以解决显示进度问题
写法很简单, 首先,服务器和 浏览器初始化,然后绑定或者触发事件,服务器和浏览器都可以socket.on和socket.emit 事件。
类似这样:

服务器的大致处理脚本:

然后看到的效果基本上是这样:

改进的地方:
1:业务逻辑改了,原先是直接请求首页就直接下载,现在改成输入关键词,点击按钮开始执行。
2: 文件结构,原先直接写到router.js里,其实很不合理,现在把通信和下载的核心代码抽取出来,放到 bin/mods 里面。
3: 下载文件名,用了目标网站的部分图片名称,这样下载不同的关键词图片,不会覆盖掉,可以保存更多的图片
讲的不够细致,貌似耐心不够好,抱歉了。
老规矩,放上源码:

https://github.com/tianxiaofeng747/nodeImg

现在的问题:
1: 假如遇到某些子页面是死链接,node就会报错退出,这其实不友好
2: 没有判断同样的关键词不能爬取第二遍
3: 正在爬取的时候应该禁用掉浏览器 开始 按钮
4: 下载完后是否可以提供一个页面直接去浏览查看所有的图片?
就先这样把。吃饭,吃饭。

评论 ( 1 )
最新评论
lawrence 2018-07-17 20:31:24 1F

用http不好么?非要用WS这么麻烦的东西:(