从零开始写一个node爬虫(一)

目录结构

  • controller
    • spider.js // 封装的spider方法
  • index.js // 项目入口

index.js

var cheerio = require("cheerio");
var server = require("./controller/spider");

// var url = "http://v.163.com/special/opencourse/englishs1.html";
var url = 'http://zwbk.com/';
server.fetchData(url, function(data) {
  if (data) {
    //console.log(data);

    var $ = cheerio.load(data);
    $("a").each(function(i, e) {
      console.log(1111);
    });

    console.log("done");
  } else {
    console.log("error");
  }
});
复制代码

spider.js

var http = require("http");
var fetchData = function (url, callback) {
  http.get(url, function(res) {
    var data = "";
    res.on('data', function (chunk) {
      data += chunk;
    });
    res.on("end", function() {
      callback(data);
    });
  }).on("error", function() {
    callback(null);
  });
}
exports.fetchData = fetchData;
复制代码

执行node index.js,发现只输出了一个done,猜测可能是做了反爬虫,在网上随便找了一个域名,执行后果然有了输出。为了解决这个问题,我引入了superAgent来发送请求,superAgent可以很方便的模拟浏览器的一些属性,例如refer,请求头等...还有个好处是superAgent可以直接抓取https的页面.

现在讲地址替换成https://github.com/azoth1991,已经可以抓到页面内容了

$("a").each(function(i, e) {
  console.log(i,e.attribs.href);
});

0 '#start-of-content'
1 'https://github.com/'
2 '/features'
3 '/features/code-review/'
4 '/features/project-management/'
5 '/features/integrations'
6 '/features/actions'
7 '/features#team-management'
8 '/features#social-coding'
9 '/features#documentation'
10 '/features#code-hosting'
11 '/customer-stories'
12 '/security'
13 '/enterprise'
14 '/explore'
...
    
复制代码

仓库地址 欢迎star ^_^

待续...

转载于:https://juejin.im/post/5cac97ec6fb9a068b47b5a79

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值