前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用node撸一个简单的爬虫

用node撸一个简单的爬虫

作者头像
润森
发布2019-08-30 21:18:45
6200
发布2019-08-30 21:18:45
举报
文章被收录于专栏:毛利学Python毛利学Python

nodejs爬虫

一提起爬虫可能大家就会觉得很高大上,就会想起python.呵呵,我们今天偏偏就要颠覆大家的认知,用node不到100行代码擼一个简单的爬虫。天天python,我决定换下口味。

开发环境

  • nodejs
  • vscode

热下身

Node.js内置的fs模块就是文件系统模块,负责读写文件。

我先用node.js 读写文件 hello,world,新建为index.js

代码语言:javascript
复制
// 加载fs
const fs = require('fs');
// const path = require('path');

// 路径
let filePath = './test.txt';
let writer = fs.createWriteStream(filePath);
writer.write('hello,world\n',err=>{
    if(err){
        console.log('write error');
    }else{
        console.log('write success');
    }
});
writer.end('bye');

在命令行执行node index.js

文件就写入成功了

搞爬虫

在合适目录下,新建文件夹nodejspdier 打开命令行终端,进入当前目录执行npm init,初始化package.json文件

环境安装

  • npm install cheerio
  • npm install request

如果安装不了,换源cnpm

在nodejs中npm就是python的pip

cheerio是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对DOM进行操作的地方

下面代码是对cheerio的介绍

代码语言:javascript
复制
const cheerio = require('cheerio')
const $ = cheerio.load('<h2 class="title">Hello world</h2>')

$('h2.title').text('Hello there!')
$('h2').addClass('welcome')

$.html()
//=> <h2 class="title welcome">Hello there!</h2>

这次爬取的网易云邓紫棋歌手的歌曲的信息

  • 链接:https://music.163.com/artist?id=7763

代码如下

代码语言:javascript
复制
const request = require('request');
// 为服务器特别指定的,快速的实施jquery的核心操作。
const cheerio = require('cheerio');
const path = require('path');
// 文件操作
const fs = require('fs');
var filePath = path.resolve(__dirname, 'data') + '/hotsong.csv';
var writer = fs.createWriteStream(filePath);
// 不是地址栏中的地址,需要在控制面板中查看
// 邓紫棋的热门歌曲
var uri = 'https://music.163.com/artist?id=7763'; 
request({url : uri,
    headers : {'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/66.0.3359.181 Safari/537.36'},
    method: 'get'},(err, res, body)=>{
        if(err){
            console.log('爬取失败:\n', err);
        }else{
            //console.log(res.statusCode, body);
            console.log('爬取成功!');

            var _$ = cheerio.load(body);
            var ul = _$('#song-list-pre-cache').html();
            var $ = cheerio.load(ul);
            $('li').map(function(){
            // song's  id
            let songId = $(this).find('a').attr('href');
            songId = songId.replace('/song?id=', '');
            // song's  url
            let songUrl = 'https://music.163.com/song?id=' + songId;
            // song's  name
            let songName = $(this).find('a').text();
            var chunk = songId + ',' + songName + ',' + songUrl + '\n';
            console.log(chunk);
            // 写入流
            writer.write(chunk, err=>{

                if(err){
                    // console.log('error');
                    console.log('写入出错:\n', err);
                }else{
                    console.log('数据写入成功!');
                    writer.end();
                }
            })
            })   
        }
    })

执行 node index.js

效果图

用nodejs爬虫的好处就是速度快,python用上多线程下载速度能够比过nodejs,但是解析网页这种事python没有nodejs快,毕竟js原生就是为了写网页。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nodejs爬虫
  • 开发环境
  • 热下身
  • 搞爬虫
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档