Old Sunset Days

Node.jsでWebスクレイピングを試す

日付 タグ node.js カテゴリ node.js

目次

Node.jsを使ってWebページから情報を抽出するスクレイピング

Webスクレイピング(Web scraping)といえば、サイトのページから、興味のある情報を抽出したり、それを収集することである。 以前から使っているRubyではNokogiriというgemを使ってWebスクレイピングをやっていたりしたのだが、Node.jsをせっかくインストールしたので、 Node.jsで動かせるWebスクレイピングの方法がないか調べていた。Node.jsで動かせれば、Firebaseでも動かせるだろう。 そこで、osmosisというスクレイピング用のモジュールが使えそうなので、まずはこれを使ってやってみた。

https://github.com/rchipka/node-osmosis - osmois

osmosisのインストール

まずはともあれ、テスト用に使うディレクトリを作成。

$ mkdir osmosis_test

次にpackaeg.jsonを生成するために

$ npm init -yes
Wrote to /Users/tsunemi/osmosis_test/package.json:

{
  "name": "osmosis_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

ついでosmosisパッケージのインストール

$ npm install osmosis --save

> libxmljs@0.19.7 install /Users/tsunemi/osmosis_test/node_modules/libxmljs
> node-pre-gyp install --fallback-to-build --loglevel http
...
...以下省略

これで使える状態になっているはず。

osmosisを利用するプログラムを記述

とりえあず、このサイトの記事からOGP情報のメタタグを抽出するようなデータを取ってくることを考える。 例えば、前回に書いた記事

( ==> MacにnodebrewでNode.jsをインストール

に埋め込まれたOGP情報

  • og:site_name
  • og:url
  • og:title
  • og:type
  • og:description
  • og:image

これらのタグの情報を取得してみる。

osmosis_sample.js

var osmosis = require('osmosis');
let response;

osmosis
.get('https://hugo-de-blog.com/node-install/')
.find('head')
.set({
  site_name: "meta[property='og:site_name']@content",
  url: "meta[property='og:url']@content",
  title: "meta[property='og:title']@content",
  type: "meta[property='og:type']@content",
  description: "meta[property='og:description']@content",
  image: "meta[property='og:image']@content"
})
.data(res => response = res)
.error(err => response = `error:` + err)
.done(function() {
  console.log(response);
  console.log("Web scraping was done")
});

まずはosmosisを使うのでrequire文で利用を宣言して、あとは対象URLからデータを引っ張ってくる。 その中でfind文によりheadに書かれている情報を取ってきて、ogpメタタグをサーチして結果をresponeに代入。 console.logでogpメタタグの抽出した結果を出力という流れ。

では、これで情報が取れるかどうか見てみる。

$ node osmosis_sample.js

これで、

{
  site_name: 'Old Sunset Days',
  url: 'https://hugo-de-blog.com/node-install/',
  title: 'MacにnodebrewでNode.jsをインストール',
  type: 'article',
  description: 'Node.jsのインストール この前、Firebaseをとにかく使ってみたくて、いつの間にかどこのタイミングでどう入れたか忘れたNode.js環境をそのまま使った。順番が前後するが、ここでNode.jsのインストール方法をみていく。 インストーラーパッケージを使ってもNode.jsを',
  image: 'https://hugo-de-blog.com/images/favicon.png'
}
Web scraping was done

という結果が取れたので一応はうまくいったようだ。