Node.js学习 爬虫下载豆瓣电影top250图片

利用node.js实现爬虫,并且爬取豆瓣电影top250的列表和图片。

1 什么是node.js

简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎

2 什么是爬虫

(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

3 准备

  需要引入的包有cheerio和request,直接使用npm install命令在工程目录下安装即可。

  其中cheerio是类似jquery的包,cheerio是nodejs的抓取页面模块,用于解析DOM的。

  而Request —— 让 Node.js http请求变得超简单。

  新建data目录和img目录,data目录下面存放电影信息,img目录存放图片。这两个目录同样可以用fs模块的内置函数生成。

4 源码

var http = require(‘https‘);
// 豆瓣网站添加了https,所以用http模块就抓不到数据了,把http模块换成https模块,并且不得指定80端口,这里无需指定端口,https模块会默认使用443端口。
var fs = require(‘fs‘);
var path = require(‘path‘);

var cheerio = require(‘cheerio‘);
// 使用npm install cheerio --save 来安装 加入--sava参数,项目对于此包的依赖就会写入package.json中
// 这里不需要全局安装,所以不需要-g参数
var request = require(‘request‘);

var movies = [];
// 爬虫的URL信息
//
var num=0;
function getData(startNum) {
    var opt = {
        hostname: ‘movie.douban.com‘,
        path: ‘/top250?start=‘ + startNum + ‘&filter=‘,
        // port : 80,
        headers: {
            ‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36‘
        }
    };

    http.get(opt, function(res) {
        var html = ‘‘;

        res.setEncoding(‘utf-8‘);

        res.on(‘data‘, function(chunk) {
            html += chunk;
        });

        res.on(‘end‘, function() {
                // 真正的处理在这里

                var $ = cheerio.load(html);

                $(‘.item‘).each(function() {
                    var info = $(".bd p", this).text().replace(/\s+/g, "");
                    var actor = $(".bd p", this).text();
                    var temp,temp2;
                    info.replace(/([\u2E80-\u9FFF\:\·]+)/, function(match, $1, $2) {
                        temp = $1;
                        temp2 = $2;
                    });

                    var movie = {
                        title: $(‘.title‘, this).eq(0).text(),
                        director: temp,
                        actor: temp2,
                        year: /\d+/g.exec(info).toString(),
                        star: $(‘.info .star .rating_num‘, this).text(),
                        quote: $(".quote .inq", this).text(),
                        picURL: $(‘.pic img‘, this).attr(‘src‘)
                    };
                    movies.push(movie);
                    saveImg(‘img/‘,movie.picURL,movie.title);
                });
                // console.log(movies);
                if(num<=25)
                    getData(num+=5);

            })
            // 还可以是txt
            // 调用10次,每次
        saveData(‘data/data.json‘, movies);

    }).on(‘error‘, function(err) {
        console.log(err);
    })
}

getData(0);

/**
 * [saveData description]
 * @param  {[type]} path   [保存数据的文件夹]
 * @param  {[type]} movies [数据]
 * @return {[type]}        [description]
 */
function saveData(path, movies) {
    fs.writeFile(path, JSON.stringify(movies), function(err) {
        if (err) {
            return console.log(err);
        }else {

            console.log("Data saved");
        }
    })
}

// 保存图片函数
function saveImg(imgDir, url,title) {
    http.get(url, function(res) {
        var data = ‘‘;
        res.setEncoding(‘binary‘);
        res.on(‘data‘, function(chunk) {
            data += chunk;
        });
        res.on(‘end‘, function() {
            //  path.basename(url)
            fs.writeFile(imgDir + title + ‘.jpg‘, data, ‘binary‘, function(err) {
                if (err) {
                    return console.log(err);
                }
                console.log(‘image downloaded‘, title + ‘.jpg‘);
            });
        })
    }).on(‘error‘, function(err) {
        console.log(err);
    })
}
时间: 2024-12-24 12:09:41

Node.js学习 爬虫下载豆瓣电影top250图片的相关文章

用Node.js写爬虫,撸羞羞的图片

说到爬虫,很多人都认为是很高大上的东西.哇塞,是不是可以爬妹纸图啊,是不是可以爬小片片啊.答案就是对的.爬虫可以完成这些东西的操作.但是,作为一个正直的程序员,我们要在法律允许范围内用爬虫来为我们服务,而不是为所欲为.(ps:此处应有掌声,谢谢.) 今天,我带来一个用Node.js写的爬虫.一说到教程呢,可能大多数人认为比较枯燥无味.那这样好了,我教大家爬妹纸图,上干货: 是不是瞬间有了动力了? 说到爬虫呢,其实从客观上来说,"所有网站皆可爬".互联网的内容都是人写出来的,而且都是偷懒

Python小爬虫——抓取豆瓣电影Top250数据

写LeetCode太累了,偶尔练习一下Python,写个小爬虫玩一玩~ 确定URL格式 先找到豆瓣电影TOP250任意一页URL地址的格式,如第一页为:https://movie.douban.com/top250?start=0&filter=,分析该地址: https:// 代表资源传输协议使用https协议: movie.douban.com/top250 是豆瓣的二级域名,指向豆瓣服务器: /top250 是服务器的某个资源: start=0&filter= 是该URL的两个参数,

练习:一只豆瓣电影TOP250的爬虫

练习:一只豆瓣电影TOP250爬虫 练习:一只豆瓣电影TOP250爬虫 ①创建project ②编辑items.py import scrapy class DoubanmovieItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() rank = scrapy.Field() title = scrapy.Field() link = scrapy.Field() rate

运维学python之爬虫高级篇(五)scrapy爬取豆瓣电影TOP250

对于scrapy我们前面已经介绍了简单的应用,今天我们用一个完整的例子,爬取豆瓣电影TOP250来做一个小的练习,把scrapy阶段做一个总结. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 2.1 需要保存的数据 首先确定我们要获取的内容,在items中定义字段,来将非结构化数据生成结构化数据,获取的内容主要包括:排名.电影名称.得分.评论人数.如下

python爬虫练习1:豆瓣电影TOP250

项目1:实现豆瓣电影TOP250标题爬取: 1 from urllib.request import urlopen 2 from bs4 import BeautifulSoup 3 import re 4 5 class doubanSpider(): 6 def __init__(self): 7 """ 8 初始化, 9 页码,URL,存储数据, 10 """ 11 self.page = 0; 12 # "http://mov

使用JSP+Servlet+Jdbc+Echatrs实现对豆瓣电影Top250的展示

使用JSP+Servlet+Jdbc+Echatrs实现对豆瓣电影Top250的展示 写在前面: 有的小伙伴,会吐槽啦,你这个标题有点长的啊.哈哈 ,好像是的!不过,这个也是本次案例中使用到的关键技术.如果,你正愁不会的数据可视化,那么我接下来,我会带你一步一步的实现这个数据可视化的功能. 效果图: 开发工具:我们选择的是IDEA,你还得准备一个豆瓣top250的数据源,我这里用python爬虫抓取统计了豆瓣top250电影各个国家电影数量.如何你担心,没有数据.先不用担心,我会提供的. 小建议

[感想]Web crawler with Python - 03.豆瓣电影TOP250

按照大牛的步骤简单地爬了豆瓣电影top250.过程感想记录一下. 教程链接:在这里 爬虫写完以后,一直出现错误 AttributeError: 'NoneType' object has no attribute 'find' #'nonetype'的对象没有属性发现 出错原因:调用对象是个None,然后调用出错.出错行原本是在第10页没有下一页的链接时候,判断soup.find('span', attrs={'class', 'next'}).find('a')  这句话的结果来选择返回结果,

利用selenium爬取豆瓣电影Top250

这几天在学习selenium,顺便用selenium + python写了一个比较简陋的爬虫,现附上源码,有时间再补充补充: 1 from selenium import webdriver 2 from selenium.webdriver.support.wait import WebDriverWait 3 from selenium.webdriver.support import expected_conditions as EC 4 from selenium.webdriver.c

03_使用scrapy框架爬取豆瓣电影TOP250

前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关命令以及理解框架各部分的作用. 1.本次目标 爬取豆瓣电影TOP250的信息,将得到的数据保存到mongoDB中. 2.准备工作 需要安装好scrapy以及mongoDB,安装步骤这里不做赘述.(这里最好是先了解scrapy框架各个部分的基本作用和基础知识,这样方便后面的内容的理解.scrapy文档