Node.js 爬虫爬取电影信息

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

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

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

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

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

代码在最下面



  1. const request=require('request');
  2. const url="https://www.1905.com/vod/list/n_1/o3p1.html";
  3. const fs=require('fs');
  4. const { resolve } = require('path');
  5. function req(url){
  6. return new Promise((resolve,reject)=>{
  7. request.get(url,(err,response,body)=>{
  8. if(err) reject(err)
  9. else resolve({response,body});
  10. })
  11. })
  12. }
  13. //获取起始界面的所有分类地址
  14. async function getClassUrl(){
  15. let {response,body}=await req(url);
  16. // console.log(body);
  17. let reg1=/<span class="search-index-L">类型 :<\/span>(.*?)<div class="grid-12x">/igs; //i不区分大小写 g全局 s让.匹配换行
  18. let result1=reg1.exec(body)[1];
  19. let reg2=/<a href="javascript\:void\(0\);" onclick="location\.href='(.*?)';return false;"(.*?)>(.*?)<\/a>/igs;
  20. let result2="";
  21. // console.log(reg2.exec(result1));
  22. let urlArr=[];
  23. while(result2=reg2.exec(result1)){
  24. if(result2[3]!="全部"){
  25. let obj={
  26. className:result2[3],
  27. url:result2[1]
  28. }
  29. urlArr.push(obj);
  30. fs.mkdir("./movies/"+result2[3],{ recursive: true },(err) => {
  31. if (err) throw err;
  32. });
  33. getMovies(result2[1],result2[3]);
  34. // console.log(result2.index);
  35. // console.log(reg2.lastIndex);
  36. }
  37. }
  38. // console.log(urlArr.length); //17个分类
  39. };
  40. //通过分类栏,获取页面中的电影连接
  41. async function getMovies(url,className){
  42. let {response,body}=await req(url);
  43. let reg3=/<a class="pic-pack-outer" target="_blank" href="(.*?)".*?><img/igs;
  44. let result3="";
  45. let urlArr=[];
  46. while(result3=reg3.exec(body)){
  47. urlArr.push(result3[1]);
  48. getDate(result3[1],className);
  49. }
  50. }
  51. //对电影详情页进行分析
  52. async function getDate(url,className){
  53. let {response,body}=await req(url);
  54. let reg1=/<h1 class="playerBox-info-name playerBox-info-cnName">(.*?)<\/h1>/;
  55. // let reg4=/<!-- 文字简介 -->.*?<span id="playerBoxIntroCon">(.*?)<a href="(.*?)" target="_blank" data-hrefexp="fr=vodplay_ypzl_xx">\.\.\.<span>[详细]/;
  56. let result1=reg1.exec(body);
  57. // console.log(result1[1]);
  58. let reg2=/<span id="playerBoxIntroCon">(.*?)<a href="(.*?)" /;
  59. let result2=reg2.exec(body);
  60. // console.log(result2[2]);
  61. writeFile(result1,result2,url,className);
  62. }
  63. //写入文件
  64. async function writeFile(result1,result2,url,className){
  65. let movie={
  66. name:result1[1],
  67. brief:result2[1],
  68. url:url,
  69. details:result2[2]
  70. };
  71. let data=JSON.stringify(movie);
  72. fs.writeFile(`./movies/${className}/${movie.name}.json`,data,(err)=>{
  73. if (err) {return console.log(err)}
  74. });
  75. //下面的写入流写法也可以
  76. // let w = fs.createWriteStream(`./movies/${className}/${movie.name}.json`);
  77. // w.write(data,'utf-8');
  78. // w.end;
  79. // w.on('error', function(err){
  80. // console.log(err.stack);
  81. // });
  82. };
  83. 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. kubernetes:用kubeadm管理token(kubernetes 1.18.3)

    一,token的用途: 1,token是node节点用来连接master节点的令牌字串, 它和ca证书的hash值是把一台node节点加入到kubernetes集群时要使用的凭证 2, 通过kubea ...

  2. 笔记之Utility.DataAccess

    挤出时间看了一些代码,做一些笔记,备忘!!! 现在ORM随处可见,为什么不要已有的ORM而要手动写SQL呢?这肯定是有因为滴,存在必合理嘛! 自认为关于性能.维护.Maybe还有其他的,欢迎大家拍砖! ...

  3. 实战:xfs文件系统的备份和恢复

    概述 XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据.xfsdump 按inode顺序备份一个XFS文件系统. centos7选择xfs格式作为默认文件系统 ...

  4. windows下安装mongodb4.x版本

    一个无名前辈的血汗经验,提醒来者 现在mongod出到4.x的版本,而网上的大多数教程是针对3.x的版本的.在4.x的版本中,不要再试图使用自定义安装,我搞了3个多小时都没搞定,如果土豪c盘很大,直接 ...

  5. Deployer 的使用

    假设我们的项目在本地 /www/demo-project 下,那么我们切换到该目录: $ cd /www/demo-project 然后执行 Deployer 的初始化命令: $ dep init 它 ...

  6. build设计模式

    又叫生成器模式 public class MainActivity extends AppCompatActivity { TextView textView; Button button; prot ...

  7. vue-cli2.0创建项目步骤

    Vue是近两年来比较火的一个前端框架(渐进式框架吧),与reactjs和angularjs三国鼎立,我不是职业前端,做过Vue,了解了一下React,听说过Angluar.我只能这么说,我来晚了,没经 ...

  8. LoadRunner接口脚本编写过程中遇到的问题及分享

    工作中需要接口测试,报文编辑器一条条手工发费时费力,因此考虑利用web_submit_data函数POST方法进行报文编辑.在报文编辑中主要遇到了三个问题,其中一个问题耗时两天查到问题所在,在这里与大 ...

  9. A*算法的有关知识--例子:最短路径问题

    前置知识 定义1,g(n)=从树根到节点n的代价.当算法处理到某个节点时,g(n)是可以精确计算的. 定义2,h*(n)=从节点n到目标节点的优化路径的代价.一般不可知. 定义3,f*(n)=g(n) ...

  10. 使用微创联合M5S空气检测仪、树莓派3b+、prometheus、grafana实现空气质量持续监控告警WEB可视化

    1.简介 使用微创联合M5S空气检测仪.树莓派3b+.prometheus.grafana实现空气质量持续监控告警WEB可视化 grafana dashboard效果: 2.背景 2.1 需求: 1. ...