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

im, 无色
im, 无色
im, 无色
919
文章
0
评论
2019年7月1日15:16:56 评论 1,979

首先奉上链接

代码

#!/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上其实有一点小瑕疵,在启动时候其实图标会显出来然后马上就消失了,自己可以用定时器看一下。

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

im, 无色
  • 本文由 发表于 2019年7月1日15:16:56
C# 开发Chrome内核浏览器(WebKit.net) Chrome开发

C# 开发Chrome内核浏览器(WebKit.net)

WebKit.net是对WebKit的.Net封装,使用它.net程序可以非常方便的集成和使用webkit作为加载网页的容器。这里介绍一下怎么用它来显示一个网页这样的一个最简单的功能。 第一步: 下载...
Google Chrome中的高性能网络 (三) Chrome开发

Google Chrome中的高性能网络 (三)

使用预连接优化了TCP连接管理   已经预解析到了主机名,也有了由OmniBox和Chrome Predictor提供信号,预示着用户未来的操作。为什么再进一步连接到目标主机,在用户真正发起...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: