前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用sync-request和cheerio写爬虫

使用sync-request和cheerio写爬虫

作者头像
ApacheCN_飞龙
发布2019-02-15 10:33:48
1.1K0
发布2019-02-15 10:33:48
举报
文章被收录于专栏:信数据得永生信数据得永生

node.js自带的http模块是异步获取网页内容的,不过我们可以到npm上去搜索同步的http模块。sync-request就是其中一种。

首先,安装sync-request包:

代码语言:javascript
复制
npm install sync-request

它的使用方法是:

代码语言:javascript
复制
var request = require('sync-request');
var html = request(method, url, options).getBody().toString();

然后我们需要一个解析html树的工具。jsdom可以用,但是它实在是太大,我们可以用cheerio,它提供了类似jquery的api,更加便捷。

代码语言:javascript
复制
npm install cheerio

之后:

代码语言:javascript
复制
var cheerio = require('cheerio');
var $ = cheerio.load(html);

下面是抓取菜鸟教程(runoob.com)单部教程的一个例子:

代码语言:javascript
复制
var cheerio = require('cheerio');
var request = require('sync-request');
var fs = require('fs');

var ofile = fs.openSync('out.html', 'w');

var url = 'http://www.runoob.com/html/html-tutorial.html';
var html = request('GET', url).getBody().toString();

var toc = getToc(html);
for(var i in toc) {
    var url = toc[i];
    console.log('page: ' + url);
    html = request('GET', url).getBody().toString();
    var content = getContent(html);
    fs.writeSync(ofile, content, null, 'utf-8');
}

fs.closeSync(ofile);
console.log('Done..');


function getToc(html)  {

    var $ = cheerio.load(html);

    var $list = $('#leftcolumn').find('a');
    var res = [];
    for(var i = 0; i < $list.length; i++)
    {
        var url = $list.eq(i).attr('href');
        res.push('http://www.runoob.com/' + url);
    }
    return res;
}


function getContent(html) {
    var $ = cheerio.load(html);
    var content = $('#content').html();
    return content;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年01月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档