组内有个妹子是影视剧迷,平时就喜欢刷剧刷电影,一般影视剧版权都控制在各个视频平台手里,想看电影自由的话,恐怕得充好几个会员,问我有没有比较科学的方式,当然有啊,某天堂,某鸟,某源网等等有很多,但这些网站大多被劫持,时不时跳出一些非法广告,非常影响心情,那就做一个小型的爬取工具送给她吧
选择electron
的原因很简单,跨平台
,node
,基本就满足这个小工具的出生了
一、electron的能力
行业惯例,先用几句简单的话描述下electron
electron
是由GitHub开发的,使用web技术来构建跨平台桌面应用程序的一个开源库,下图将electron
非常迷人的特性都表现出来了
优点:
- 将 Chromium 与 Node.js 集成到同一个运行时环境中
- 不必考虑兼容性问题,只需关注 Chromium 版本即可
- 使用 Node 强大的API,可以使web页面操作文件,调用系统API,操作数据库…
- 也不必考虑跨域问题
缺点:
- 性能上比原生应用要低
- 最终打包后体积较大
- Apple越发的对web开发者不友好
二、准备爬取内容
我们以某天堂为例,打开开发者工具,发现网页ssr处理的,没有接口,OK,那就解析网页,拿到我们想要的东西 只需要两个库就可以
- superagent
- cheerio
1、先封装一个请求函数,用来请求页面
const superagent = require('superagent')
const superagentCharset = require('superagent-charset')(superagent)
// 请求
export function superagentReq (url, method, charset1 = 'utf-8', params, data, cookies) {
return new Promise(function (resolve, reject) {
superagentCharset(method, url)
.charset(charset1)
.query(params)
.send(data)
.end((err, response) => {
if (err) {
reject(err)
}
resolve(response)
})
})
}
2、拿到页面html后,我们使用cheerio
解析页面就好了,使用过jQuery的同学用起来无压力,用法十分相似
let targetDom = $('#Zoom span table').length !== 0
? $('#Zoom span table')
: $('#Zoom span')
$(targetDom).find('a').each((i, e) => {
if ($(e).attr('href') !== '#') {
dowmloadUrl.push($(e).attr('href'))
} else {
dowmloadUrl.push($(e).text())
}
})
页面我就不赘述了,就是普通的Vue开发
成品效果
具体代码请详见GitHub 以及 安装包下载 (支持Windows、Macos)
请喜欢的朋友点个star支持一下,会持续更新搜索源