nodejs爬取视频网页信息并使用

一、安装资源包

npm install art-template

npm install request

npm install cheerio

引入包

const request = require('request')
const template = require('art-template')
const fs = require('fs')
const cheerio = require('cheerio')

二、获取网页源码,并提取需要数据

//封装异步获取网页源码函数,返回Promise对象
const RP = (url) => { 
    return new Promise((resolve, reject) => {
        request(url, function(error, response, body) {
            resolve(body)//获取网页源代码
        })
    })
}
async function main() {
    var data = [] //存放多页源码
    var arr = []//保存提取的数据
    const host = 'https://www.zhenbuka3.com'
    var s = 0
    var j = 1  //从s-j页
    for (i=s;i<j;i++) {
        const url = `/vodtype/1-${i+1}/`
        data += await RP(host + url)    
    }

网页地址栏的变化为1-1, 1-2, 1-3…, 所以每次获取网页的数据,只需要改变一个值。

S为起始页, j为尾页,可根据需要获取页数。使用await 将返回的Promise对象数据存入data中,

data中存入j-s页的数据。

    const $ = cheerio.load(data)
    $('.stui-vodlist__thumb').each((i, item) => {
        arr[i] = {
            name: $(item).attr('title'),
            image: $(item).attr('data-original'),
            url: host + $(item).attr('href'),
            information: "",
            number: i
        }
    })
    $('.stui-vodlist__detail p').each((i, item) => {
        arr[i].information = $(item).text()
    });

为抓取需要的数据,用cheerio模块创建一个和jQuery选择器用法相似的选择器。抓取 ‘名称’,’图片’,’地址’,’信息’,’序号’,以对象的形式放入数组中,由于’信息’与其他数据不在同一个选择器中,所以在后面添加进对象中。

三、使用引擎模板,用获取到的数组替换设定div

fs.readFile('本地初始html文件.html', function(error, data2) {
            var div = ''
            var add = `
            {{div}}
        `
            var ret = ''
            for (var i = 0; i < arr.length; ++i) {
                    div = `
            <div class="li"><a href={{url}} target="blank">
                <img src={{image}} alt=""></a>
                <div class="h6">{{name}}</div>
                <div class="span">{{information}}</div>
            </div>`
                ret +=  template.render(div, arr[i])
            }

使用art-template模板引擎,用arr数组中的对象替换掉div中的数据,ret存放多组div。

四、用处理后的div替换本地html页面

            var rets = ret + add    //为字符串添加{{div}}
            var html = data2.toString()
            var res = html.replace('{{div}}', rets)
            fs.writeFile('本地初始html文件.html', res, function(error) {
                if (error) {
                     console.log('写入错误')
                }
            })
        })
}
main()

将rets数据写入本地html页面,是用替换的方式,将本地html中的标识{{div}}替换为ret,为方便程序还能持续使用,还得在本地html页面中添加标识{{div}},留待下次替换。最后将处理完毕的本地html页面写入本地html文件。

执行该js文件后,打开本地html页面执行,就能获得如下效果:

本地初始html文件源码:

<style>
        .li {
            width: 20%;
            height: 20%;
            float:left;
            position: relative;
            margin-top: 1%;
            margin-bottom: 1%;
        }
        img {
            position: relative;
            width: 60%;
            height: 17vw;
            background-size: auto;
            left: 20%;
        }
        .h6 {
            margin-bottom: 0px;
            margin-top: 2px;
            width: 60%;
            min-height: 19px;
            font-size: 13px;
            margin-left:20%;
            overflow: hidden;
            text-overflow:ellipsis;
            white-space: nowrap;
        }
        .span {
            width: 60%;
            margin-bottom: 0px;
            margin-left:20%;
            min-height: 19px;
            font-size: 11px;
            overflow: hidden;
            color:rgb(92, 91, 91);
            text-overflow:ellipsis;
            white-space: nowrap;
        }
    </style>
<body>
    <div>           
     {{div}}
</div>
</body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值