用Chrome headless和puppeteer做一个妹子图爬虫

首先奉上链接

代码

#!/usr/local/bin/node

/**
 * @author: vanishcode
 * @desc: hahahaha, fuck you, ADs!
 */

const puppeteer = require('puppeteer');
const axios = require('axios');
const fs = require('fs');
var currentNumber = 1;

async function run(url) {
    console.log('Start to crawl girl\'s pivtures...');
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(url);

    let imgURL = await page.evaluate(() => {
        let imgURL = []
        let selector = 'a.view_img_link';
        let imgUrlList = [...document.querySelectorAll(selector)];
        imgUrlList.forEach(e => {
            imgURL.push(e.href)
        })
        return imgURL
    });
    //console.log(imgURL);
    imgURL.forEach((e, i) => {
        //console.log(e)
        if (currentNumber === 200) {
            browser.close();
            console.log('All pictures downloaded complete!')
            return
        }
        axios.get(e, {
            responseType: 'stream'
        }).then(res => {
            res.data.pipe(fs.createWriteStream(`./meizi/${currentNumber}.${e.substr(e.length-3)}`));
            currentNumber++;
        })
    });
    let nextPage = await page.evaluate(() => {
        return document.querySelectorAll('#comments > div:nth-child(4) > div > a.previous-comment-page')[0].href;
    })
    console.log('OK!');
    setTimeout(function() {
        run(nextPage)
    }, 3000);



}
run('http://jandan.net/ooxx');

一些感想

较为通用的小爬虫,其实妹子图网站就是一种结构,需要的信息是选择器以及下一页的地址。

本项目使用了puppeteer,确实十分强大,个人感觉headless差不多是chromium暴露接口后的一种产物,在macOS上其实有一点小瑕疵,在启动时候其实图标会显出来然后马上就消失了,自己可以用定时器看一下。

代码是比较水的,重要的是图,是吧。。。。。。。。。

你可能感兴趣的:(nodejs爬虫)