にわかには信じがたいが、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
プログラム作成
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
- fp-scraper
- pixelmatch