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
という結果が取れたので一応はうまくいったようだ。