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. 用CentOS 7自制Vagrant Box文件

      写在前面 利用vagrant保持开发生产环境一致是一个很好的方法,不过vagrant官网上的box文件下载是真的很慢,因此,这里教大家如何自制box文件. 这篇文章你会接触到: vagrant使用 ...

  2. openresty上安装waf

    一,查看openresty的当前版本 [root@localhost luacache]# /usr/local/openresty/bin/openresty -V nginx version: o ...

  3. go mod 使用bee工具

    https://github.com/beego/bee/releases bee  windows https://github.com/beego/bee/releases/download/v1 ...

  4. Centos6.X 手动升级gcc

    操作环境 CentOS6.5 64bit,gcc原版本为4.4.7,不能支持C++11的特性,所以需要升级 [root@zengxj ~]# wget http://ftp.gnu.org/gnu/g ...

  5. 树莓派调试PCF8591遇到的小问题

    错误提示:bus = smbus.SMBus(1) IOError: [Errno 2] No such file or directory 提示的内容为端口没有打开即IIC端口:如图,打开IIC使能 ...

  6. C# 微支付退款申请接口 V3.3.6

    /// <summary>/// 微支付退款申请/// </summary>/// <param name="context"></par ...

  7. spring cloud gateway网关路由分配

    1, 基于父工程,新建一个模块 2,pom文件添加依赖 <dependencies> <dependency> <groupId>org.springframewo ...

  8. c#用于时间日期的类型:DateTime

    https://blog.csdn.net/qq_42675313/article/details/82155446 写的简洁易懂了

  9. 痞子衡嵌入式:基于恩智浦i.MXRT1010的MP3音乐播放器(RT-Mp3Player)设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是基于i.MXRT1011的MP3播放器参考设计. i.MXRT1011是恩智浦i.MXRT四位数系列的入门型号,虽然是入门级,可也是50 ...

  10. CodeForces 1408I Bitwise Magic

    题意 给定三个整数 \(n,k,c\) 和一个长度为 \(n\) 的序列 \(a\),保证 \(a_i\) 互不相同.可以操作 \(k\) 次,每次随机选择一个 \(a_i\) 变成 \(a_i-1\ ...