代码地址如下:
http://www.demodashi.com/demo/12368.html

1 概述

本实例主要使用Node.js去抓取电影的节目单,方便大家使用下载。

2 node package

  1. fs
  2. cheerio
  3. superagent
  4. superagent-charset
  5. express
  6. path

fs 用来读写文件

cherrio 类似jquery

superagent (ajax http模块)

superagent-charset 解决中文乱码问题

express 搭建server

path 路径

统一安装这些包,可以使用一下命令:

npm i express cheerio superagent superagent-charset path fs --save-dev

如果想深入了解这些包 可以去下面这个网址了解下

find package

3 步骤

第一步:

利用express 搭建本地服务

const app = require('express')();
const port = 3000; app.get('/', (req, res)=>{
res.send('hello world');
}); app.listen(port, ()=>{
console.log('listening port on', port);
});

打开浏览器 输入localhost:3000

看到下面页面,说明初步成功

第二步

先试用superagent(http模块)去获取页面的数据,然后用cheerio(类似jquery)去获取页面数据。

具体代码如下

var item = [];
function getMovies() {
item = [];
var url = 'http://www.dytt8.net';
superagent.get(url + '/index.htm').charset().end((err, sres) => {
if (err) {
throw err;
}
var $ = cherrio.load(sres.text);
$('.bd3rl .co_area2').each(function (i, n) {
if (i > 1) return;
var $n = $(n);
var obj = {
name: $n.find('.title_all strong').text(),
data: []
};
$n.find('tr').each(function (i, m) {
var $m = $(m);
var childUrl = url + $m.find('.inddline').eq(0).find('a').eq(1).attr('href');
obj.data.push({
title: $m.find('.inddline').eq(0).text(),
href: url + $m.find('.inddline').eq(0).find('a').eq(1).attr('href'),
date: $m.find('.inddline').eq(1).text(),
download_url: ''
});
});
item.push(obj);
});
fs.writeFile(path.join(__dirname, './doc', 'dy.txt'), '', function () { });
item.forEach(n => {
n.data.forEach((m, i) => {
superagent.get(m.href).charset().end((err, cres) => {
var _$ = cherrio.load(cres.text);
var download_url = _$('#Zoom table a').text();
var title = _$('.bd3r .title_all').text();
title = title.substring(title.indexOf('《') + 1, title.indexOf('》'));
// console.log(title)
var total_movie = title + '~~' + download_url + '\n';
// var total_movie = download_url.split(']')[1].substr(1) + '~~' + download_url + '\n';
var buff = new Buffer(total_movie);
fs.appendFile(path.join(__dirname, './doc', 'dy.txt'), buff, function () { });
});
});
});
});
}

superagent.get()类似ajax get请求,cheerio.load() 类似jquery,获取数据的方法其实就是jquery的方法。

获取完首页的链接,一般我们需要进去详情页才能看得到ftp的地址,可是现在我们做了第二次的轮询请求,就直接得到了ftp的地址,无需进到详情页,节省很多时间。

最终我们会存到本地文件夹里

接下来我们会把这些数据呈现到页面中:

代码实现:

app.get('/dy', function (req, res, next) {
var url_data = [];
var img_url = 'https://raw.githubusercontent.com/huainanhai/EXE/master/sevenDay/doc/wz.jpg';
fs.readFile(path.join(__dirname, './doc', 'dy.txt'), 'utf-8', (err, data) => {
if (err) throw err;
url_data = data.split('\n').filter(function (n) {
return n != '';
});
var str = '<div style="width:50%;">';
str += '<h4 style="padding-left:10px;">(温馨提示:复制ftp开头的路径到‘迅雷极速版’(邮件附件里面有)就会自动下载电影了, 最新免费电影节目单不定时更新,福利呦)</h4>'
item.forEach(m => {
str += '<h3 style="padding-left:10px;">' + m.name + '</h3>';
m.data.forEach((n) => {
url_data.forEach(j => {
var name = j.split('~~')[0];
name = name.split('.')[0];
if (n.title.indexOf(name) > -1) {
n.download_url = j.split('~~')[1];
}
});
str += '<div style="">' +
'<a href="' + n.href + '" style="height:30px;display:inline-block;vertical-align: middle;text-decoration:none;margin-left:6px;" target="_blank">' + n.title + '</a>' +
'<span style="height:30px;display:inline-block;vertical-align: middle;color: red;float:right;">' + n.date + '</span>' +
'</div>';
str += '<div style="background:#fdfddf;border:1px solid #ccc;padding:3px 10px;margin-bottom:10px;">' + n.download_url + '</div>';
});
});
str += '<img src="' + img_url + '" width="540" height="748" />';
str += '</div>';
res.send(str);
})
});

4 源码截图

如果要下载本实例,解压 然后 npm install 即可安装所需依赖包,下次我们讲解如果把数据发送到自己的邮箱(或者群发更多人的邮箱)!

Node.js 抓取电影天堂新上电影节目单及ftp链接

代码地址如下:
http://www.demodashi.com/demo/12368.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

Node.js 抓取电影天堂新上电影节目单及ftp链接的更多相关文章

  1. Node.js抓取网页

    前几天四六级成绩出来(然而我没考),用Node.js做了一个模拟表单提交并抓取数据的Web 总结一下用到的知识,简单的网页抓取大概就是这个流程了 发送Get或Post请求 表单提交,首先弄到原网页提交 ...

  2. 使用node.js抓取有路网图书信息(原创)

    之前写过使用python抓取有路网图书信息,见http://www.cnblogs.com/dyf6372/p/3529703.html. 最近想学习一下Node.js,所以想试试手,比较一下http ...

  3. node.js抓取数据(fake小爬虫)

    在node.js中,有了 cheerio 模块.request 模块,抓取特定URL页面的数据已经非常方便. 一个简单的就如下 var request = require('request'); va ...

  4. node.js 抓取网页数据

    var $ = require('jquery'); var request = require('request'); request({ url: 'http:\\www.baidu.com',/ ...

  5. node.js 抓取

    http://blog.csdn.net/youyudehexie/article/details/11910465 http://www.tuicool.com/articles/z2YbAr ht ...

  6. node.js抓取网上图片保存到本地

    用到两个模块,http和fs var http = require("http");var fs = require("fs"); var server = h ...

  7. node.js爬取数据并定时发送HTML邮件

    node.js是前端程序员不可不学的一个框架,我们可以通过它来爬取数据.发送邮件.存取数据等等.下面我们通过koa2框架简单的只有一个小爬虫并使用定时任务来发送小邮件! 首先我们先来看一下效果图 差不 ...

  8. 爬虫:selenium + phantomjs 解决js抓取问题(一)

    selenium模块主要用来做测试,模拟键盘.鼠标来操作浏览器. phantomjs 就像一个无界面的浏览器一样. 两个结合能很好的解决js抓取的问题. 测试代码: #coding=utf-8 fro ...

  9. node.js服务端程序在Linux上持久运行

    如果要想在服务端部署node.js程序,让其持久化运行,就不能单单使用npm start命令运行,当然了,这样运行是毫无问题的,但是当关闭xshell窗口或者是关闭进程的时候(其实关闭xshell窗口 ...

随机推荐

  1. NodeJS npm 包装包失败的解决方案

    这个也是网上搜的,亲自试过,非常好用! 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set reg ...

  2. [bzoj3944] sum [杜教筛模板]

    题面: 传送门 就是让你求$ \varphi\left(i\right) $以及$ \mu\left(i\right) $的前缀和 思路: 就是杜教筛的模板 我们把套路公式拿出来: $ g\left( ...

  3. .config 中特殊字符的处理

    我们知道在应用程序中嵌入连接字符串可能导致安全漏洞和维护问题.使用 Ildasm.exe(MSIL 反汇编程序) 工具可以查看编译到应用程序源代码中的未加密连接字符串.此外,如果连接字符串发生更改,则 ...

  4. webstorm不能使用stylus

    1.https://stackoverflow.com/questions/23583514/webstorm-8-showing-errors-for-a-correct-html-tag 2. & ...

  5. linux之tr

    通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您也可以用它来除去重复 ...

  6. CodeVS 1503 愚蠢的宠物

    题目描述 Description 大家都知道,sheep有两只可爱的宠物(一只叫神牛,一只叫神菜).有一天,sheep带着两只宠物到狗狗家时,这两只可爱的宠物竟然迷路了…… 狗狗的家因为常常遭到猫猫的 ...

  7. 洛谷P2168 荷马史诗

    哈夫曼树原理. k=2时,和合并果子一样一样的. 由此思考,k>2时,应该也有相似的原理.确实如此,k进制哈夫曼树,每个结点最多会有k-1个子结点,对应k-1个元素(“元素”可以是更深层的子树) ...

  8. Javascript&Html-系统对话框

    Javascript&Html-系统对话框 浏览器通常内置三种对话框,他们分别是 alert(),confirm()以及prompt() .这三种对话框的外形跟页面的HTML以及CSS均没有任 ...

  9. Sql常用日期格式

    原文发布时间为:2010-09-16 -- 来源于本人的百度文章 [由搬家工具导入] SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm ...

  10. dva脚手架 dva-cli 配置roadhogrc,antd-mobile样式按需加载 不生效的问题

    1.新安装dva-cli脚手架版本0.9.2,dva版本是2.4.1,roadhogrc版本是2.4.9 roadhogrc2 与1 的区别把roadhogrc 改成了webpackrc 所以配置an ...