Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

2019年10月24日木曜日

プログラミング100コード

t f B! P L
近年、台風や大雨など、自然災害が日本全域を襲っています。
そこで、警報や注意報などをNode.jsでWebスクレイピングし、必要な情報を取得してみました。
Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピングしました。

Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

1 PaizaCloudを使ってToDoリストの作成

まずはウォーミングアップです。
面倒な環境設定をしなくても良いのが「PaizaCloud」の良いところです。

登録し、新規サーバーの作成をするのですが、「Node.js」「MongoDB」にクリックし、次に進みます。

「Node.js入門 - 初心者向け、はじめてのNode.js入門」を見ながら進めます。

Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

2 scraperjsを使ってNode.jsでWebスクレイピング

気象庁のホームページから、まずはタイトル「指定河川洪水予報」をスクレイピングしてみます。

Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

必要なライブラリをインストール

scrape.jsファイル
Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

結果
Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

つぎに、同じ気象庁のホームページから「指定河川洪水予報」の表をスクレイピングします。

scrape.jsファイル
const scraperjs = require('scraperjs');

scraperjs.StaticScraper.create('https://www.jma.go.jp/jp/flood/')
  .scrape(($) => {
    return $('.tablelist').text();
  }).then((tablelist) => {
    console.log(tablelist);
  }).catch((error) => {
    console.error('Error:', error);
  });

ターミナルで
node scrape.js

結果

Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

3 Crawlerを使ってNode.jsでWebスクレイピング

こんどは、日本気象協会のホームページから雨の多い三重県の警報・注意報をスクレイピングしてみます。

Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

必要なライブラリをインストール

scrape.jsファイル
const Crawler = require('crawler');

const crawler = new Crawler({
  callback : (error, res, done) => {
    if(error){
      console.log(error);
    } else {
      const $ = res.$;
      console.log($('.map-warn-first-entries-table').text());
    }
    done();
  }
});

crawler.queue('https://tenki.jp/bousai/warn/5/27/');

ターミナルで
node scrape.js

結果

Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

4 cheerio-httpcliを使ってNode.jsでWebスクレイピング

さいごに、「鉄道コム」のサイトから、関東エリアの鉄道遅延情報をスクレイピングしてみます。

Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

必要なライブラリをインストール

scrape.jsファイル
const client = require('cheerio-httpcli');

var word = '公式情報あり';

client.fetch('https://www.tetsudo.com/traffic/category/%E9%96%A2%E6%9D%B1%E3%82%A8%E3%83%AA%E3%82%A2/', { q: word })
    .then((result) => {
        console.log(result.$('.main-table').text());
        result.$('a').each(function (idx) {
            var $h3text = result.$(this).find('h3').text();
            var $url = result.$(this).attr('href');
            if ($h3text.includes('slp-kbit')) {
                console.log($h3text + '  '  + $url);
            }
        });
    })
    .catch((err) => {
        console.log(err);
    })
    .finally(() => {
        console.log('終了');
    });

ターミナルで

node scrape.js

結果

Node.jsでscraperjsやCrawler、cheerio-httpcliを使ってWebスクレイピング

参照サイト




このブログを検索

Translate

QooQ