前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第1张图片

前言:有一天,产品经理贱兮兮的跟你说:“我们看到一个挺好的搜谱小程序,我们来仿一个吧,爬出他们的数据来,放到我们库里”

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第2张图片

没办法,搞吧!!!!!!

爬数据

分析小程序接口

首先安利一个好用的ios系统免费抓包软件: stream

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第3张图片

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第4张图片

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第5张图片

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第6张图片

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第7张图片

通过分析目标小程序接口发现,有一个接口可以获取单个详情,并且发现每个乐谱的id是自增的,,啧啧!这就好说了啊

上代码

const shell = require('shelljs')
const fs = require('fs')

const getDetil = (id) => {
    // 获取curl
    let curl = `curl 'https://api.quxuege.com/search/one?id=${id}'  -H 'Host: api.quxuege.com'  -H 'Accept: */*'  -H 'Content-Type: application/x-www-form-urlencoded'  -H 'Accept-Encoding: gzip, deflate, br'  -H 'Connection: keep-alive'  -H 'Cookie: '  -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.15(0x17000f31) NetType/WIFI Language/zh_CN'  -H 'Referer: https://servicewechat.com/wx21c9c829a9ecfc04/8/page-frame.html'  -H 'token: '  -H 'Accept-Language: zh-cn'`
    const res = JSON.parse(shell.exec(curl).stdout)

    if (res.code === 200) {
        const p = res.data
        if (p && p.id) {
            let t = [p.id, p.title, p.createTime, p.details[0].image]
            fs.appendFileSync('sopu.txt', `${t.join(',')}\n`)
        }
    }
}

for (let i = 101042; i < 199999; i++) {
    getDetil(i)
}

id爬到20万左右就没有了,总共爬了9万条数据

分析数据

经过分析发现,每张乐谱都有竞品小程序二维码,这样的肯定不行

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第8张图片

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第9张图片

这样就不能搞一个脚本去固定贴二维码了,!!!

opencvjs识别二维码

不说了上opencv识别二维码啊,先整个html测试下,具体opencvjs识别原理我计划稍后单独出一个文章解释

引入opencvjs





    
    Hello OpenCV.js
    



    

Hello OpenCV.js

OpenCV.js is loading...

No Image
imageSrc
canvasOutput
canvasOutput2

启动

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第10张图片

选择一个乐谱上传

前端常规(sao)操作之:我用opencvjs识别爬取的乐谱图片二维码位置并覆盖_第11张图片

看到三个回型。说明识别成功

接下来就是下载图片。定位位置。用canvas贴上我们二维码。入库~

好啦~,产品经理的需求就这么愉快的搞定了!

你可能感兴趣的:(javascript,node.js,opencv)