IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JavaScript【爬虫】在Node环境下爬取电影资源 -> 正文阅读

[JavaScript知识库]JavaScript【爬虫】在Node环境下爬取电影资源

爬取结果

在这里插入图片描述

完整代码

主要代码:
在node环境下直接运行此代码

const request = require('request')
const fs = require('fs')
const {
  fsRead,
  fsWrite,
  fsDir
} = require('./lcfs')
let httpUrl = "https://www.1905.com/vod/list/n_1/o3p1.html"

//请求网页函数
function req(url) {
  return new Promise(function (resolve, reject) {
    request.get(url, function (err, response, body) {
      if (err) {
        reject(err)
      } else {
        resolve(response, body)
      }
    })
  })
}

//爬取多页数据
// function getMorePageMovies(page) {
//   for(let i = 1; i <= page;i ++) {
//     let MoreHttpUrl = "https://www.1905.com/vod/list/n_1/o3p" + i + ".html"
//     //i表示第几页
//     getClassUrl(MoreHttpUrl,i);
//   }
// }
// getMorePageMovies(80);
//获取起始页面的所有分类地址
async function getClassUrl(targetUrl) {
  const {
    response,
    body
  } = await req(targetUrl)
  const reg = /<span class="search-index-L">类型(.*?)<div class="grid-12x">/isg
  let result = reg.exec(body)[1]
  const reg1 = /onclick="location\.href='(.*?)';return.*?>(.*?)<\/a>/isg

  let arrClass = []
  let res = null
  while (res = reg1.exec(result)) {
    if (res[2] != "全部") {
      let obj = {
        className: res[2],
        url: res[1]
      }
      arrClass.push(obj)
      await fsDir('./movies/' + res[2])
      getMovies(res[1], res[2])
    }

  }
  // console.log(arrClass)
}
getClassUrl(httpUrl);
//获得电影链接
async function getMovies(url,moviesType) {
  let {
    response,
    body
  } = await req(url)
  let reg = /<a class="pic-pack-outer" target="_blank" href="(.*?)" title="(.*?)"><img/igs
  let res = null
  let arrList = []
  while (res = reg.exec(body)) {
    arrList.push(res[1])
    parsePage(res[1],moviesType)
  }
}

//将拿到的数据写入
async function parsePage(url,mT) {
  let {response, body} = await req(url)
  let reg = /<h1 class="playerBox-info-name playerBox-info-cnName">(.*?)<\/h1>/
  let res = reg.exec(body)
  //作者姓名
  let movie = {
    name: res[1],
    movieUrl: url,
    movieType: mT
  }
  let strMovie = JSON.stringify(movie)
  // console.log(movie)
  fsWrite('./movies/' + mT + "/" + res[1] + '.json',strMovie)
}

封装的文件操作代码

const fs = require('fs');

function fsWrite(path, content) {
  return new Promise(function (resolve, reject) {
    fs.writeFile(path, content, {
      flag: 'a',
      encoding: 'utf-8'
    }, function (err) {
      if (!err) {
        resolve(err);
      }
    })
  })
}

function fsRead(path) {
  return new Promise(function (resolve, reject) {
    fs.readFile(path, {
      flag: 'r',
      encoding: 'utf-8'
    }, function (err, data) {
      if (err) {
        reject(err);
      } else {
        resolve(data);
      }
    })
  })
}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 00:05:00  更:2021-07-24 00:05:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 16:06:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码