第一个nodejs爬虫:爬取豆瓣电影图片

news/2024/7/19 10:58:47 标签: 爬虫, javascript

第一个nodejs爬虫:爬取豆瓣电影图片存入本地:

首先在命令行下 npm install request cheerio express -save;

代码:

var http = require('https'); //使用https模块
var fs = require('fs');//文件读写
var cheerio = require('cheerio');//jquery写法获取所得页面dom元素
var request = require('request');//发送request请求
var i = 0;
var url = "https://movie.douban.com/subject/1889243/?from=subject-page";
//初始url 
function fetchPage(x) { //封装一层函数,方便递归调用
    startRequest(x);
}

function startRequest(x) {
    //采用http模块向服务器发起一次get请求      
    http.get(x, function(res) { //get到x网址,成功执行回调函数
        var html = ''; //用来存储请求网页的整个html内容
        res.setEncoding('utf-8'); //防止中文乱码
        //监听data事件,每次取一块数据
        res.on('data', function(chunk) {
            html += chunk;
        });
        //监听end事件,如果整个网页内容的html都获取完毕,就执行回调函数
        res.on('end', function() {
            var $ = cheerio.load(html); //采用cheerio模块解析html
            var news_item = {
                //获取电影的标题
                title: $('.related-info h2 i').text().trim(),
                //i是用来判断获取页数
                i: i = i + 1,

            };

            console.log(news_item); //打印新闻信息
            var news_title = $('.related-info h2 i').text().trim();

            savedContent($, news_title); //存储每篇文章的内容及文章标题

            savedImg($, news_title); //存储每篇文章的图片及图片标题

            //下一篇电影的url
            nextLink = $(".recommendations-bd dl:last-child dd a").attr('href');
            if(i <= 10) { //爬取10页
                fetchPage(nextLink);
            }
        });

    }).on('error', function(err) { //http模块的on data,on end ,on error事件
        console.log(err);
    });

}
//存储标题函数
function savedContent($, news_title) {
    $('#link-report span').each(function(index, item) {
        var x = $(this).text();
        x = x + '\n';
        //将新闻文本内容一段一段添加到/data文件夹下,并用新闻的标题来命名文件
        fs.appendFile('./data/' + news_title + '.txt', x, 'utf-8', function(err) {
            if(err) {
                console.log(err);
            }
        });
    })
}
//该函数的作用:在本地存储所爬取到的图片资源
function savedImg($, news_title) {
    $('#mainpic img').each(function(index, item) {
        var img_title = $('#content h1 span').text().trim(); //获取图片的标题
        if(img_title.length > 35 || img_title == "") { //图片标题太长
            img_title = "Null";
        }
        var img_filename = img_title + '.jpg';
        var img_src = $(this).attr('src'); //获取图片的url

        //采用request模块,向服务器发起一次请求,获取图片资源
        request.head(img_src, function(err, res, body) {
            if(err) {
                console.log(err);
            }
        });
        request(img_src).pipe(fs.createWriteStream('./image/' + news_title + '---' + img_filename));
        //通过流的方式,把图片写到本地/image目录下,并用标题和图片的标题作为图片的名称。
    })
}
fetchPage(url); //主程序开始运行

 

转载于:https://www.cnblogs.com/rlann/p/7102587.html


http://www.niftyadmin.cn/n/914598.html

相关文章

jenkins之启动与关闭

jenkins可以通过内置的应用服务器或者借助其他应用服务器启动 目录 1、启动jenkins 2、关闭jenkins 3、重启jenkins 4、重新加载jenkins配置信息 1、启动jenkins(windows) 方法一&#xff1a;使用内置的jetty服务器启动 java -jar jenkins.war 方法二&#xff1a;借助其他…

使用国内docker 镜像仓库

编辑 /etc/sysconfig/docker 如下&#xff1a; OPTIONS--selinux-enabled --add-registryr6w9c7qa.mirror.aliyuncs.com/library DOCKER_CERT_PATH/etc/docker重启docker服务 # service docker restart Redirecting to /bin/systemctl restart docker.service测试&#xff1a…

【SoDiaoEditor电子病历编辑器】编辑器支持移动化

写在前面 每次写SoDiao时都是一次灵魂拷问&#xff0c;这么猥琐的名字&#xff0c;会对程序媛产生多少误导啊&#xff0c;我是一个正直的人&#xff0c;不管你信不信每个见到我的人都这么说。本次更新拖了很久&#xff0c;本来半个月前应该实现的&#xff0c;却一直拖到昨天才写…

Eclipse在线安装SVN

一、SVN在线安装 下面为在线安装SVN插件。以下是在线安装步骤&#xff1a; 其中http://subclipse.tigris.org/update_1.10.x是最新版本的SVN插件的下载站点【subclipse是Eclipse的SVN插件】。 点击【Finish】按钮开始安装SVN插件 安装过程中弹出如下的警告框&#xff0c;不用理…

centos7 resize2fs Couldn't find valid filesystem superblock.

http://blog.chinaunix.net/uid-20767811-id-5015333.html

CSS3学习系列之动画

Transitions功能使用方法在css3中&#xff0c;transitions功能通过将元素的某个属性从一个属性值在指定的时间内平滑过渡到另一个属性值来实现动画功能&#xff0c;可通过transitions属性来使用transitions功能。 transitions属性的使用方法如下所示&#xff1a; transitions&a…

jquery修改a标签的href链接和文字

以下修改a标签的href链接和修改文字的代码&#xff1a; 原链接&#xff1a; <a href"http://keleyi.com" id"home_keleyi_com">得已111</a> 修改a标签的href链接&#xff1a; $(#home_keleyi_com).attr(href,http://keleyi.com); 修改文字&…

利用curl模拟 移动端 接入 spring cloud security OAuth2

获取/更新access_token [rootlocalhost bin]# curl -X POST -d grant_typepassword -d usernamehknaruto -d passwordpassword "http://client1:secret172.16.1.162/oauth/token" {"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOj…