当前位置:   article > 正文

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

nodejs爬视频

一、安装资源包

npm install art-template

npm install request

npm install cheerio

引入包

  1. const request = require('request')
  2. const template = require('art-template')
  3. const fs = require('fs')
  4. const cheerio = require('cheerio')

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

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

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

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

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

  1. const $ = cheerio.load(data)
  2. $('.stui-vodlist__thumb').each((i, item) => {
  3. arr[i] = {
  4. name: $(item).attr('title'),
  5. image: $(item).attr('data-original'),
  6. url: host + $(item).attr('href'),
  7. information: "",
  8. number: i
  9. }
  10. })
  11. $('.stui-vodlist__detail p').each((i, item) => {
  12. arr[i].information = $(item).text()
  13. });

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

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

  1. fs.readFile('本地初始html文件.html', function(error, data2) {
  2. var div = ''
  3. var add = `
  4. {{div}}
  5. `
  6. var ret = ''
  7. for (var i = 0; i < arr.length; ++i) {
  8. div = `
  9. <div class="li"><a href={{url}} target="blank">
  10. <img src={{image}} alt=""></a>
  11. <div class="h6">{{name}}</div>
  12. <div class="span">{{information}}</div>
  13. </div>`
  14. ret += template.render(div, arr[i])
  15. }

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

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

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

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

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

本地初始html文件源码:

  1. <style>
  2. .li {
  3. width: 20%;
  4. height: 20%;
  5. float:left;
  6. position: relative;
  7. margin-top: 1%;
  8. margin-bottom: 1%;
  9. }
  10. img {
  11. position: relative;
  12. width: 60%;
  13. height: 17vw;
  14. background-size: auto;
  15. left: 20%;
  16. }
  17. .h6 {
  18. margin-bottom: 0px;
  19. margin-top: 2px;
  20. width: 60%;
  21. min-height: 19px;
  22. font-size: 13px;
  23. margin-left:20%;
  24. overflow: hidden;
  25. text-overflow:ellipsis;
  26. white-space: nowrap;
  27. }
  28. .span {
  29. width: 60%;
  30. margin-bottom: 0px;
  31. margin-left:20%;
  32. min-height: 19px;
  33. font-size: 11px;
  34. overflow: hidden;
  35. color:rgb(92, 91, 91);
  36. text-overflow:ellipsis;
  37. white-space: nowrap;
  38. }
  39. </style>
  40. <body>
  41. <div>
  42. {{div}}
  43. </div>
  44. </body>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/396792
推荐阅读
相关标签
  

闽ICP备14008679号