Help us understand the problem. What is going on with this article?

フィーチャーフォン(ガラケー)向けWebサイトのスクレイピング

More than 1 year has passed since last update.

にわかには信じがたいが、FPサイトを運用するシーンは少なからず存在する。

運用担当としては
効率的に表示確認ができるようにスクレイピングツールで一括スクレイピングして
「とりあえずページがぶっ壊れてない」ということを担保したい。

課題

XML文法エラー

素直にpuppeteerでスクレイピングすると
XMLの文法エラーによって正しく表示できないFPサイトがいくつかある。

著名なエミュレータ(FireMobileSimulator)では
Content-TypeをHTMLに強制変換してXMLの文法エラーを回避しており、
puppeteerでスクレイピングするには同じことをやってあげる必要がある。

UIDの設定

FPサイトは基本的にUIDを使ったログイン処理を行なっているので
UIDを偽装して会員専用ページなどをスクレイピングしたいシーンがある。
UIDはRequestHeaderにいくつかのプロパティを追加する必要がある。

fp-scraper

上記の課題をもろもろ解消したNodeモジュール。
数行のコードを記述するだけで任意のWebページを一括でスクレイピングできる。

インストール

mkdir scraping
cd scraping

npm init -y
npm i -S fp-scraper
vi app.js

プログラム作成

app.js
const FpScraper = require('fp-scraper');

(async() => {
  const scraper = new FpScraper({
    // スクレイピングしたいURLを配列で渡す
    urls: ['http://k.nhk.jp/'],
    // UIDの設定
    uid: 'MY_CUSTOM_UID'
  });

  await scraper.scrape();
})();

実行

// resultディレクトリにキャプチャが格納される
node app.js

余談

fp-scraperと組み合わせてpixelmatchで差分比較すると
より効果的なスクレイピングツールによる表示確認が実現できる。

URL

cc822jp
Web業界に興味のある方、若手のエンジニアさん向けにフロントエンドを楽しく学ぶ・フロントエンドが生活の一部になるような動画を作っています。
https://www.youtube.com/channel/UCXXU3hMKQCn9fNdp7-LeGMA
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away