内容来源: 2017 年 2 月 25 日, 懂球帝高级开发工程师邓佳龙在 "html5 梦工场 & 微软开发者沙龙第 01 期 -再说"JS 一统江湖 "" 进行所见即所得 - 基于 Node.js 的页面数据实践演讲分享. IT 大咖说 (微信 ID:itdakashuo) 作为独家视频合作方, 经主办方和讲者审阅授权发布.
嘉宾演讲视频回顾及 PPT 链接: http://t.cn/RnLosMH
摘要
数据抓取是企业信息化的根基和第一步, 只有利用先进的技术作好了信息抓取工作, 才能为信息化带来最大的价值. 懂球帝高级开发工程师邓佳龙用五个字就概括了数据抓取的精髓.
我眼中的数据抓取
数据抓取, 通俗叫法是 "爬虫". 就是把非结构化的信息数据从网页中抓取出来, 保存到结构化的数据库的过程.
能在页面上看到的数据就是能得到的数据, 这就是我所说的 "所见即所得" 这五个字的含义.
数据抓取技术可以通过很多后台语言实现, 比如 PHP,JAVA 等等, 但是 Node.js 有它独特的优势.
知己知彼, 百战不殆. 数据抓取也有恶意攻击网站或盗取数据的情况. 作为前端工程师, 只有当你知道别人是如何抓取的时候, 才能想办法去做防守.
页面抓取的三个步骤
1, 获取数据.
2, 从网页中提取并清洗出所需的数据.
3, 落入存储当中.
使用 Node.js 进行数据抓取的优势
Node.js 的无阻塞和事件驱动这两个特性可以大大提升抓取效率.
因为 Javascript 是一门前端语言, 所以用它来做数据的提取和清洗有很大优势.
Node.js 最近几年的社区活跃度比较高, 可以用的工具和包也很多.
有一些数据会隐藏在 JS 脚本中, 只能用 Javascript 来抓取.
案例分享 -- 抓取球探足球数据
在球探足球的官网上有一些关于赛事比分的应用, 如果这些数据要小编人工录入, 至少要三个月. 有了数据抓取技术, 就变得很便捷高效.
首先抓取赛事数据, 然后落地球队数据, 再落地球员数据, 根据赛事数据可以获取到赛程, 比赛, 赔率等数据.
足球里的赛程, 赔率等信息都是非常重要的, 而我们利用数据抓取技术可以轻易获得.
曾经填过的 "坑"
有些网页如果用一些常规的数据请求方式不带 useragent 信息是无法正常访问的. 所以在做数据抓取的时候最好带上 useragent.
有些页面上的数据接口必须在头部中声明特定的 referer 才能获取数据.
部分网页和数据接口会有访问频次限制. 我建议大家降低访问频次, 不要过于规律.
一些网页和数据接口会出现转码问题.
有的网页和数据接口需要身份验证才能访问. 那么就需要先做一个模拟登录, 把一些 cookie 信息缓存下来, 获取数据的时候再带上这些 cookie 信息.
获取数据异常状态需要兼容性处理和一定的重试机制. 针对不同的网站机制也有所不同.
目标网站改版时需要一定的预警机制.
分享几个有用的包
Request-- 主要是用来获取数据.
Cheerio-- 用于转换和数据提取.
Co-- 把异步转化为同步的方式来写.
Async-- 做并发流程控制.
Mongoose-- 主要用于操纵 MongoDB.
Sequelize-- 主要用于操纵 MySQL.
Log4js-- 做日志记录.
Pm2-- 守护进程.
Icony-lito-- 转换代码.
来源: https://juejin.im/post/5afb85446fb9a07ab458caa4