落書きノート

ふと自分が気になった事を書いてます

Node.jsでスクレイピング

ウェブサイトをダウンロードするスクリプトです。リダイレクトさせることは出来ませんが、一応これで出来るということで。また次回記載するかもしれません。

function download(url, savepath, callback){
  var http = require('http');
  var fs = require('fs');
  var outfile = fs.createWriteStream(savepath);
  var req = http.get(url, function(res){
    res.pipe(outfile);
    res.on('end', function(){
      outfile.close();
      callback();
    });
  });
}

download(
  "http://www.aozora.gr.jp/index_pages/person81.html",
  "miyazawakenji.html",
  function(){ console.log("ok, kenji."); });

download(
  "http://www.aozora.gr.jp/index_pages/person148.html",
  "natumesoseki.html",
  function(){ console.log("ok, soseki."); });

スクリーンショット 2016-09-03 13.58.48

ウェブサイトのリンクアドレスを抽出するコードです。

var client = require('cheerio-httpcli');
var URL = require('url');

var url = "http://www.aozora.gr.jp/index_pages/person81.html";
var param = {};

client.fetch(url, param, function(err, $, res){
  if(err){ console.log("error"); return; }

  $("a").each(function(idx){
    var text = $(this).text();
    var href = $(this).attr('href');
    if(!href) return;
    var href2 = URL.resolve(url, href);

    console.log(text + " : " + href);
    console.log(" => " + href2 + "\n");
  });
});

スクリーンショット 2016-09-03 13.58.25

ウェブサイトから画像のリンクアドレスを抽出するコードです。

var client = require('cheerio-httpcli');
var URL = require('url');

var url = "https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%8C";
var param = {};

client.fetch(url, param, function(err, $, res){
  if(err){ console.log("error"); return; }

  $("img").each(function(idx){
    var src = $(this).attr('src');
    src = URL.resolve(url, src);
    console.log(src);
  });
});

ウェブサイトから画像をダウンロードするスクリプトです。

var client = require('cheerio-httpcli');
var request = require('request');
var fs = require('fs');
var URL = require('url');

var savedir = __dirname + "/img";
if(!fs.existsSync(savedir)){
  fs.mkdirSync(savedir);
}

var url = "https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%8C";
var param = {};

client.fetch(url, param, function(err, $, res){
  if(err){ console.log("error"); return; }

  $("img").each(function(idx){
    var src = $(this).attr('src');
    src = URL.resolve(url, src);
    var fname = URL.parse(src).pathname;
    fname = savedir + "/" + fname.replace(/[^a-zA-Z0-9\.]+/g, '_');
    request(src).pipe(fs.createWriteStream(fname));
  });
});

スクリーンショット 2016-09-03 14.19.48