百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

利用puppeteer采集自己想要的书籍

toyiye 2024-06-21 12:21 11 浏览 0 评论

安装node


cd /usr/local/src/
wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz
tar zxvf node-v0.10.24.tar.gz
cd node-v0.10.24
./configure --prefix=/usr/local/node/0.10.24
make
make install
node -v

安装完node之后npm就安装好了

vagrant@homestead:~/code/Ecc3.0_System01$ npm -v

切换cnpm国内源


╰$ npm install -g cnpm --registry=https://registry.npm.taobao.org

安装puppeteer


╰$ cnpm i puppeteer

测试脚本


const puppeteer = require('puppeteer');  

(async () => {
    try {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('https://www.baidu.com/');
    
        // 等待时间
        await page.waitFor(1000*2);
    
        // 截图
        await page.screenshot({path:'./output/baidu.png',fullPage:true});
    
        // pdf
        await page.pdf({path:'./output/baidu.pdf',format:"A4",printBackground:true});
    
        // 输入内容
        await page.type('#kw','Python',{delay:true});
        // 触发内容
        await page.click('#su');
    
        // 等待时间
        await page.waitFor(1000*5);
    
        await page.setViewport({
            width:1920,
            height:1080
        });
    
        // 截图
        await page.screenshot({path:'./output/baidu_python.png',fullPage:true});
    
        // pdf
        await page.pdf({path:'./output/baidu_python.pdf',format:"a4",printBackground:true});
    
        await browser.close();
    } catch (error) {
        console.log(`this is the ${error}`);

    }       
})(); 

结果


批量下载 Es6文档


const puppeteer = require("puppeteer");

(async() => {     
    try {
        const browser = await puppeteer.launch({
            headless:true,
            args: [
                '–disable-gpu', // GPU硬件加速
                '–disable-dev-shm-usage', // 创建临时文件共享内存
                '–disable-setuid-sandbox', // uid沙盒
                '–no-first-run', // 没有设置首页。在启动的时候,就会打开一个空白页面。
                '–no-sandbox', // 沙盒模式
                '–no-zygote',
                '–single-process' // 单进程运行         
            ]
        });  
        const page = await browser.newPage();

        await page.goto('http://es6.ruanyifeng.com/#README',{
            'timeout': 0 //无限大
        });                             
        let aTags = await (await page).evaluate(() => {
            let as = [...document.querySelectorAll('ol li a')];
            return as.map((a) =>{
                return {
                  href: a.href.trim(),
                  name: a.text
                }
            });        
        });
        // console.log(aTags)    
        // await page.pdf({path: `./output/${aTags[0].name}.pdf`,format:'a4',printBackground:true});  
    
        for (var i = 1; i < aTags.length;i++){
            pageS = await browser.newPage();
            var a = aTags[i];
            console.log("完成个数:"+i);                  
            await pageS.goto(a.href,{'timeout': 0});      
            await pageS.pdf({path: `/Users/shiyuxiang/develop/www/Ecc3.0_System01/output/${a.name}.pdf`,format:'a4'});
            pageS.close();  
        }               
        console.log("完成") 
        browser.close();              
    } catch (err) {
        console.log(`this is the ${err}`);
    }                   
})();

执行


╰$ node crawl.js

结果


将PDF可并到一块

╰$ sudo apt-get install pdftk

╰$ cnpm i pdf-merge

脚本

const PDFMerge = require('pdf-merge');
const path = require('path');
const fs = require('fs');

/**
 * @desc 返回路径
 * @param {String} dir, dir2 字符串
 * @return {String} 路径
 */
function resolve(dir, dir2 = ''){
	return path.posix.join(__dirname, './', dir, dir2);
}

// 配置
const config = {       
	entry: './output/',
	output: './data/'     
};   

// 
const filenameArr = fs.readdirSync(resolve(config.entry));

const sortedFilenameArr = filenameArr.sort((str1, str2) => {
	let regex = /^(\d{1,2})\./;
	let a = +str1.match(regex);
	let b = +str2.match(regex);
	return a - b;
});

// console.log(sortedFilenameArr);

const files = sortedFilenameArr.map((el) => {
	return resolve(`${config.entry}${el}`);
});

console.log('files', files);   

const outputPath = resolve(config.output);

const isExists = fs.existsSync(outputPath);

console.log('isExists', isExists, 'outputPath', outputPath);

/**
 * @desc 创建输出路径
 */
function mkdirOutputpath(){  
	try{
		fs.mkdirSync(outputPath);
		console.log('mkdir is successful!');
	} catch(e){
		console.log('mkdir is failed!', e);
	}
};
// 如果不存在 则创建
if(!isExists){
	mkdirOutputpath();
}

console.log('let\'s start merge...');

const filename = `ES6 入门教程-${Date.now()}.pdf`;    

// console.log(filename);   


const output = resolve(`${config.output}${filename}`);

// console.log(output);

// Save as new file
PDFMerge(files, {         
	output: output,
})
.then((buffer) => {
	console.log('merge is successful!');
});

结果

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码