博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js 抓取电影天堂新上电影节目单及ftp链接
阅读量:6088 次
发布时间:2019-06-20

本文共 4113 字,大约阅读时间需要 13 分钟。

代码地址如下:

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

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

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]( " localhost:3000")

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

zsjoCmKBOcwnQ6gJHoA.png

第二步

先试用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的地址,无需进到详情页,节省很多时间。

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

5hc1goyKIDBTOiTQReo.png

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

8rab56fBG7rydqgNy7I.png

代码实现:

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 = '
'; str += '

(温馨提示:复制ftp开头的路径到‘迅雷极速版’(邮件附件里面有)就会自动下载电影了, 最新免费电影节目单不定时更新,福利呦)

' item.forEach(m => { str += '

' + m.name + '

'; 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 += '
' + '
' + n.title + '' + '
' + n.date + '' + '
'; str += '
' + n.download_url + '
'; }); }); str += '
'; str += '
'; res.send(str); })});

4 源码截图

hmUBdGfIbhfubcHqkbB.jpg

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

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

代码地址如下:

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

你可能感兴趣的文章
Mysql利用binlog恢复数据
查看>>
我的友情链接
查看>>
用yum安装mariadb
查看>>
一点IT"边缘化"的人的思考
查看>>
WPF 降低.net framework到4.0
查看>>
搭建一个通用的脚手架
查看>>
开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
查看>>
开源磁盘加密软件VeraCrypt教程
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>
要想成为高级Java程序员需要具备哪些知识呢?
查看>>
带着问题去学习--Nginx配置解析(一)
查看>>
onix-文件系统
查看>>
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>