Node.js 爬虫爬取电影信息

我的CSDN地址:https://blog.csdn.net/weixin_45580251/article/details/107669713

爬取的是1905电影网的信息,使用的是正则匹配。

本来为了更好地学习异步编程打好基础,没想到这玩意这么上头。

代码也写了好几天,自己技术不到家,肯定有写的不好的地方,还需要多努力。

下个月争取把vue学完,九月估计该开学了。

代码在最下面



const request=require('request');
const url="https://www.1905.com/vod/list/n_1/o3p1.html";
const fs=require('fs');
const { resolve } = require('path'); function req(url){
return new Promise((resolve,reject)=>{
request.get(url,(err,response,body)=>{
if(err) reject(err)
else resolve({response,body});
})
})
} //获取起始界面的所有分类地址
async function getClassUrl(){
let {response,body}=await req(url);
// console.log(body);
let reg1=/<span class="search-index-L">类型 :<\/span>(.*?)<div class="grid-12x">/igs; //i不区分大小写 g全局 s让.匹配换行
let result1=reg1.exec(body)[1];
let reg2=/<a href="javascript\:void\(0\);" onclick="location\.href='(.*?)';return false;"(.*?)>(.*?)<\/a>/igs;
let result2="";
// console.log(reg2.exec(result1));
let urlArr=[];
while(result2=reg2.exec(result1)){
if(result2[3]!="全部"){
let obj={
className:result2[3],
url:result2[1]
}
urlArr.push(obj);
fs.mkdir("./movies/"+result2[3],{ recursive: true },(err) => {
if (err) throw err;
});
getMovies(result2[1],result2[3]);
// console.log(result2.index);
// console.log(reg2.lastIndex);
}
}
// console.log(urlArr.length); //17个分类
}; //通过分类栏,获取页面中的电影连接
async function getMovies(url,className){
let {response,body}=await req(url);
let reg3=/<a class="pic-pack-outer" target="_blank" href="(.*?)".*?><img/igs;
let result3="";
let urlArr=[];
while(result3=reg3.exec(body)){
urlArr.push(result3[1]);
getDate(result3[1],className);
}
} //对电影详情页进行分析
async function getDate(url,className){
let {response,body}=await req(url);
let reg1=/<h1 class="playerBox-info-name playerBox-info-cnName">(.*?)<\/h1>/;
// let reg4=/<!-- 文字简介 -->.*?<span id="playerBoxIntroCon">(.*?)<a href="(.*?)" target="_blank" data-hrefexp="fr=vodplay_ypzl_xx">\.\.\.<span>[详细]/;
let result1=reg1.exec(body);
// console.log(result1[1]);
let reg2=/<span id="playerBoxIntroCon">(.*?)<a href="(.*?)" /;
let result2=reg2.exec(body);
// console.log(result2[2]);
writeFile(result1,result2,url,className); }
//写入文件
async function writeFile(result1,result2,url,className){
let movie={
name:result1[1],
brief:result2[1],
url:url,
details:result2[2]
};
let data=JSON.stringify(movie);
fs.writeFile(`./movies/${className}/${movie.name}.json`,data,(err)=>{
if (err) {return console.log(err)}
});
//下面的写入流写法也可以
// let w = fs.createWriteStream(`./movies/${className}/${movie.name}.json`);
// w.write(data,'utf-8');
// w.end;
// w.on('error', function(err){
// console.log(err.stack);
// });
};
getClassUrl();

Node.js 爬虫爬取电影信息的更多相关文章

  1. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  2. 养只爬虫当宠物(Node.js爬虫爬取58同城租房信息)

    先上一个源代码吧. https://github.com/answershuto/Rental 欢迎指导交流. 效果图 搭建Node.js环境及启动服务 安装node以及npm,用express模块启 ...

  3. node.js爬虫爬取拉勾网职位信息

    简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳.杭州.西安.成都7个城市的数据,分别以前端.PHP.java.c++.python.Androi ...

  4. 手把手教你用Node.js爬虫爬取网站数据

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度 ...

  5. node js 爬虫爬取静态页面,

    先打一个简单的通用框子 //根据爬取网页的协议 引入对应的协议, http||https var http = require('https'); //引入cheerio 简单点讲就是node中的jq ...

  6. node:爬虫爬取网页图片

    代码地址如下:http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图片 ...

  7. 一个简单python爬虫的实现——爬取电影信息

    最近在学习网络爬虫,完成了一个比较简单的python网络爬虫.首先为什么要用爬虫爬取信息呢,当然是因为要比人去收集更高效. 网络爬虫,可以理解为自动帮你在网络上收集数据的机器人. 网络爬虫简单可以大致 ...

  8. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  9. 用java编写爬虫爬取电影

    一.爬取前提1)本地安装了mysql数据库2)安装了idea或者eclipse等开发工具 二.爬取内容 电影名称.电影简介.电影图片.电影下载链接 三.爬取逻辑1)进入电影网列表页, 针对列表的htm ...

随机推荐

  1. js拖拽上传 文件上传之拖拽上传

    由于项目需要上传文件到服务器,于是便在文件上传的基础上增加了拖拽上传.拖拽上传当然属于文件上传的一部分,只不过在文件上传的基础上增加了拖拽的界面,主要在于前台的交互, 从拖拽的文件中获取文件列表然后调 ...

  2. linux磁盘空间满了

    df-h 看到根目录已经用满了! find / -size +100M |xargs ls -lh列出系统内大于100M的文件 du --max-depth=1 -h 查看当前目录内文件夹的大小 看一 ...

  3. MySQL 日志之 binlog 格式 → 关于 MySQL 默认隔离级别的探讨

    开心一刻 产品还没测试直接投入生产时,这尼玛... 背景问题 在讲 binlog 之前,我们先来回顾下主流关系型数据库的默认隔离级别,是默认隔离级别,不是事务有哪几种隔离级别,别会错题意了 1.Ora ...

  4. 51nod 最大M子段和系列(1052、1053、1115)

    51nod1052 数据量小,可使用O(N*M)的DPAC,递推公式: dp[i][j]=max(dp[i-1][j-1], dp[i][j-1])+a[j]; dp[i][j]表示前j个数取 i 段 ...

  5. js堆排序

    堆的预备知识 堆是一个完全二叉树. 完全二叉树: 二叉树除开最后一层,其他层结点数都达到最大,最后一层的所有结点都集中在左边(左边结点排列满的情况下,右边才能缺失结点). 大顶堆:根结点为最大值,每个 ...

  6. vue 中v-if 与v-show 的区别

    相同点或者说功能,都可以动态操作dom元素的显示隐藏 不同点: 1.手段:v-if是动态的向DOM树内添加或者删除DOM元素:v-show是通过设置DOM元素的display样式属性控制显隐: 2.编 ...

  7. Luogu P3200 [HNOI2009]有趣的数列

    题意 给定 \(n\),求有多少个长度为 \(2n\) 的排列 \(p\) 满足 对于 \(1\leq i\leq n\),\(p_{2i-1}<p_{2i}\). \(p_1<p_3&l ...

  8. 浅析I/O模型-select、poll、epoll

    I/O流 概念 (1)c++中将数据的输入输出称之为流(stream),在c++中,流被定义为类,成为流类(stream class),其定义的对象为流对象. (2)文件,套接字(socket),管道 ...

  9. 关于windows下redis的安装

    1.下载地址:https://github.com/MSOpenTech/redis/releases 2.DOS下进redis文件夹目录,执行redis-server.exe redis.windo ...

  10. mkdir()和mkdirs()区别

    mkdir()和mkdirs()区别如下: mkdirs()可以建立多级文件夹, mkdir()只会建立一级的文件夹, 如下: new File("/tmp/one/two/three&qu ...