Node爬虫初体验

学习写个Node爬虫
准备工具

node环境,尽量用新点的版本。熟悉的编辑器。

大致步骤
  1. 分析你要抓取的网站的页面的结构,可以只看你要抓取的部分内容。
  2. 发起页面请求,(在node中进行)
  3. 对返回的数据加工处理成自己想要的
开始。
  1. 新建一个文件夹,在文件件里运行命令行,用yarn init初始化一个项目。初始化时的各种信息可填可不填,无所谓。构建工具可用npm,也可用yarn,看个人喜好。
yarn init
  1. 安装必要的node库。
    superagent(用来发起请求),jquery,jsdom(像Jquery一样处理数据)ps:本来是打算用cheerio的,结果安装的时候404,估计这个包飞了。没办法找的替代方法。
yarn add superagent
yarn add jquery
yarn add jsdom
  1. 在根目录下新建一个app.js文件。引入我们必要的库。
const superagent = require("superagent");
const jquery = require("jquery");
const jsdom = require("jsdom");
const fs = require("fs");
  1. 发起请求。比如说简书首页的推荐文章。
    先定义请求地址,也可以直接写在请求url里。用superagent发起请求
const reptileUrl = "http://www.jianshu.com/";
superagent.get(reptileUrl).end(function(err, res) {
  // 抛错拦截
  if (err) {
    throw Error(err);
  }
  const html = res.text;
  console.log(html)

在这里插入图片描述
此时在命令行里,输入命令 node app.js 这里我们已经看到有大段HTML信息输出,则证明我们是正确的。如有报错请检查一下。

  1. 接下来处理这段数据,我们先在网站里按F12审查元素看下结构,找到我们需要的这段结构。
    在这里插入图片描述
    接着在代码里处理
superagent.get(reptileUrl).end(function(err, res) {
  // 抛错拦截
  if (err) {
    throw Error(err);
  }
  const html = res.text;
  console.log(html);
  dom = new jsdom.JSDOM(html);
  const $ = jquery(dom.window);
  let data = [];
  // 获取数据
  $("#list-container .note-list li").each(function(i, item) {
    const context = $(item);
    data.push({
      id: context.attr("data-note-id"), // id
      title: replaceText(context.find(".title").text()), // 标题
      author: context.find(".meta .nickname").text(), // 作者
      info: replaceText(context.find(".abstract").text()), // 预览信息
      photo: context.find(".wrap-img img").attr("src"), // 预览图
      commentCount: context
        .find(".ic-list-comments")
        .parent()
        .text(),
      // 评论次数
      likesCount: context
        .find(".ic-list-like")
        .parent()
        .text()
      // 点赞次数
    });
  });
});

上面有一段这个代码,具体参见 https://www.cnblogs.com/weiyinfu/p/10151904.html

const html = res.text;
dom = new jsdom.JSDOM(html);
const $ = jquery(dom.window);

这个方便我们使用jquery对我们抓取到的数据进行处理,如果用cheerio会更简单一些。
抓取到数据之后我们就可以用jq将我们需要的信息从中提取出来,上面我把数据push入了一个已经定义好的数组里。通过打印数组可以发现已经有数据了
在这里插入图片描述

  1. 最后为了方便起见,我们把这段信息输出为一个json文件。文件操作需要用到node自带的fs模块。
    fs.writeFile()参数含义可以在网上查看,有很多,如果忘了,用的时候查一下就行,还是很方便的。
fs.writeFile(
    __dirname + "/data/article.json",
    JSON.stringify({
      status: 0,
      data: data
    }),
    function(err) {
      if (err) throw err;
      console.log("写入完成");
    }
  );

执行完成之后,我们会在本地目录里发现我们输出的json文件。
在这里插入图片描述
--------------------------------END-------------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值