首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Node.js爬虫之爬取1905电影网

Node.js爬虫之爬取1905电影网

作者头像
切图仔
发布2022-09-08 16:57:20
发布2022-09-08 16:57:20
1.1K0
举报
文章被收录于专栏:生如夏花绚烂生如夏花绚烂

我们主要爬取这个页面 https://www.1905.com/vod/list/n_1/o3p1.html

我们爬取类型板块的所有分类以及分类下面的电影信息列表

分析
  1. 获取 https://www.1905.com/vod/list/n_1/o3p1.html 页面
  2. 正则匹配获取分类信息(分类名称、分类url)
  3. 获取每个分类所有的电影链接
  4. 根据电影链接获取电影详细信息
代码实现

1.安装axios发送ajax请求 npm i axios

2.获取https://www.1905.com/vod/list/n_1/o3p1.html 页面

代码语言:javascript
复制
const axios = require('axios')
async function getCate() {
    let res = await axios.get('https://www.1905.com/vod/list/n_1/o3p1.html')
        console.log(res.data)
}
getCate()

res里面的data就是我们请求的html页面的源码 我们用正则提取源码中有价值的信息

3.获取所有类别栏目 我们要从源码中提取出下面的数据并进行过滤

代码语言:javascript
复制
async function getCate() {
    let res = await axios.get('https://www.1905.com/vod/list/n_1/o3p1.html')
    let reg = /<span class="search-index-L">类型(.*?)<div class="grid-12x">/igs//分类正则匹配
    let result = reg.exec(res.data)
    console.log(result[1])
}

结果如下

接下来我们要从这些数据中提取出分类链接与分类名称

代码语言:javascript
复制
async function getCate() {
    let res = await axios.get('https://www.1905.com/vod/list/n_1/o3p1.html')
    let reg = /<span class="search-index-L">类型(.*?)<div class="grid-12x">/igs//分类正则匹配
    let result = reg.exec(res.data)
    let allData = result[1]
    let cateReg = /<a href="javascript\:void\(0\);" onclick="location\.href='(.*?)';return false;" (.*?)>(.*?)<\/a>/igs
    let cateMsg
    let cateData = []//所有栏目名称与url
    while(cateMsg = cateReg.exec(allData)){
        let obj = {
            url:cateMsg[1],
            name:cateMsg[3]
        }
        cateData.push(obj)
    }
    console.log(cateData)
}

提取出分类名称与分类url

代码语言:javascript
复制
[
  { url: 'https://www.1905.com/vod/list/n_1/o3p1.html', name: '全部' },
  {
    url: 'https://www.1905.com/vod/list/n_1_t_1/o3p1.html',
    name: '爱情'
  },
  {
    url: 'https://www.1905.com/vod/list/n_1_t_5/o3p1.html',
    name: '动作'
  },
  {
    url: 'https://www.1905.com/vod/list/n_1_t_25/o3p1.html',
    name: '喜剧'
  },
...

接下来我们根据分类url获取到分类栏目的所有电影信息 定义函数getMovies 该函数接收分类栏目的url,并返回分类栏目的所有电影信息

代码语言:javascript
复制
//获取电影资源
async function getMovies(url){
    let res = await axios.get(url)
    let reg = /<a class="pic-pack-outer" target="_blank" href="(.*?)" title="(.*?)"><img/igs
    let list = []
    let movieMsg
    while(movieMsg = reg.exec(res.data)){
        let obj = {
            name:movieMsg[2],
            url:movieMsg[1]
        }
        list.push(obj)
    }
    return list
}


getCate()

我们在每次生成栏目数据的时候将栏目对应的电影资源也一并生成

代码语言:javascript
复制
async function getCate() {
  ...
    while(cateMsg = cateReg.exec(allData)){
        let obj = {
            url:cateMsg[1],
            name:cateMsg[3],
            list:[]
        }
        obj.list = await getMovies(cateMsg[1])
        cateData.push(obj)
    }
    console.log(JSON.stringify(cateData))
}

生成数据如下

我们还要根据电影url获取电影的详情信息 以《我和姐姐》为例获取如下数据

代码语言:javascript
复制
//获取电影详情
async function getMoviesDetail(url) {
    let res = await axios.get(url)
    let reg = /<div class="playerBox-info-leftPart">.*?<h1 class="playerBox-info-name playerBox-info-cnName">(?<title>.*?)<\/h1>.*?<span id="playerBoxIntroCon">(?<desc>.*?)"/igs
    let result = reg.exec(res.data)
    let obj = {
        title:result.groups.title,
        desc:result.groups.desc,
        director:result.groups.director

    }
    // console.log(obj)
    return obj
}

getCate()

每次生成电影资源的时候将电影详细信息添加

代码语言:javascript
复制
//获取电影资源
async function getMovies(url) {
 ...
    while (movieMsg = reg.exec(res.data)) {
        let obj = {
            name: movieMsg[2],
            url: movieMsg[1],
            detail:{}
        }
        obj.detail = await getMoviesDetail(movieMsg[1])//添加电影资源
        list.push(obj)
    }
    
    return list
}

由于篇幅的原因这里我们只获取了标题和电影简介,而且正则写的也很累,下一篇文章我们将使用cheerio进行数据的爬取,通过cheerio我们就不用写很长的正则表达式了

本文仅供学习交流使用,如本文侵犯了您的权益请联系2197486242@qq.com我会尽快做出处理!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析
  • 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档