赞
踩
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选择器用法相似的选择器。抓取 ‘名称’,’图片’,’地址’,’信息’,’序号’,以对象的形式放入数组中,由于’信息’与其他数据不在同一个选择器中,所以在后面添加进对象中。
- 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。
- 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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。