node.jsのスクレイピングといえばcheerio-httpcliでした
このモジュールは便利で画像の一括ダウンロードとかもできた
puppeteerはあまりダウンロードについては記載がなかった
いろいろ調べたらできた
ダウンロードすべきタグ(セレクター)がわかっている場合と
わからなくて兎にも角にも一括ダウンロードするやり方があるみたい
ダウンロードすべきタグ(セレクター)がわかっている時
const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { const browser = await puppeteer.launch({ headless: false, ignoreHTTPSErrors : true , }); const page = await browser.newPage(); page.setViewport({ width: 1280, height: 926 }); targetSelector = '#box2-inner > div.hatena-module.hatena-module-profile > div.hatena-module-body > a > img'; await page.goto('http://masalib.hatenablog.com/'); await page.waitForSelector(targetSelector); // Select the #svg img element and save the screenshot. const svgImage = await page.$(targetSelector); await svgImage.screenshot({ path: 'Download/downimage.jpg', omitBac kground: true, }); await browser.close(); })();
わからないので一括ダウンロードする時
const fs = require('fs'); const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); page.setViewport({ width: 1280, height: 926 }); let counter = 0; page.on('response', async (response) => { const matches = /.*\.(jpg|png|svg|gif)$/.exec(response.url()); if (matches && (matches.length === 2)) { const extension = matches[1]; const buffer = await response.buffer(); fs.writeFileSync(`Download/image-${counter}.${extension}`, buffer, 'base64'); counter += 1; } }); await page.goto('http://masalib.hatenablog.com/'); await page.waitFor(10000); await browser.close(); })();
responseからURLを特定してダウンロードすることができるようになった
次はSPA(シングルページアプリケーション)での画像をとれるようにしたい
これができればインスタグラムの可愛い猫画像が大量にゲットできる