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

我们爬取类型板块的所有分类以及分类下面的电影信息列表
1.安装axios发送ajax请求 npm i axios
2.获取https://www.1905.com/vod/list/n_1/o3p1.html 页面
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.获取所有类别栏目 我们要从源码中提取出下面的数据并进行过滤

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])
}结果如下

接下来我们要从这些数据中提取出分类链接与分类名称
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
[
{ 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,并返回分类栏目的所有电影信息
//获取电影资源
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()我们在每次生成栏目数据的时候将栏目对应的电影资源也一并生成
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获取电影的详情信息 以《我和姐姐》为例获取如下数据

//获取电影详情
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()每次生成电影资源的时候将电影详细信息添加
//获取电影资源
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我会尽快做出处理!