不要相信前端是安全的,今天简单验证一下,但是希望大家支持正版,支持原作者,毕竟写书不易。

安装Puppteer

 npm install --save puppeteer

选择目标网站

我们这里选择胡子大哈大神的网站 http://huziketang.mangojuice.top

爬取所有文章

基本思想思路

  • 实现方案

爬取书籍目录->根据目录爬取没个章节的内容

  • 注意的地方

本书有付费章节和免费章节,爬取付费章节需要禁用javascript执行,然后移除对应的mask的dom节点

核心代码

const path = require('path');
const fs = require('mz/fs');
const puppeteer = require('puppeteer'); const pdfDir = path.resolve(__dirname, './pdf/');
const targetHost = "http://huziketang.mangojuice.top" //保存pdf 文件
const savePdf = async (page, link) => {
let fileName = link.substring(link.lastIndexOf('/')) + '.pdf';
await page.goto(link);
await page.evaluate(() => {
//隐藏左侧菜单栏 以及下方部分内容
let allNeedHidens = document.querySelectorAll('#table-of-content,.PageNavigation,.share-block,hr,blockquote,.post__back>a,#wrapper>h1');
let elCount = allNeedHidens.length;
for (let i = 0; i < elCount; i++) {
allNeedHidens[i].style.display = 'none';
}
});
await page.pdf({
path: pdfDir + fileName
});
console.log(`${link} saved to pdf successfully!!!`);
} //启动程序
const start = async () => {
//创建一个browser 实例
let browser = await puppeteer.launch({
headless: true,
devtools: false
}); //创建一个空白page实例
let page = await browser.newPage();
//设置禁用js,当前必须设置,否则会导致页面无法处理
//说明:只是禁用page原有javascript,但是page.evaluate 中可以继续使用
await page.setJavaScriptEnabled(false); //获取书目录标题
await page.goto(targetHost + '/books/react/'); let result = await page.evaluate((targetHost) => {
//获取目录链接
let ulArray = document.querySelectorAll('ul.table-of-content>li>a');
let array = Array.prototype.slice.call(ulArray, 0);
let links = array.map((v) => {
let href = v.getAttribute('href');
return `${targetHost}${href}`;
})
return {
links: links
}
}, targetHost); for (let link of result.links) { await savePdf(page, link); } await page.close();
await browser.close(); } start();

代码比较简单,不做过多解释。

使用Puppeteer抓取受限网站的更多相关文章

  1. Python多进程方式抓取基金网站内容的方法分析

    因为进程也不是越多越好,我们计划分3个进程执行.意思就是 :把总共要抓取的28页分成三部分. 怎么分呢? # 初始range r = range(1,29) # 步长 step = 10 myList ...

  2. 使用BurpSuite抓取HTTPS网站的数据包

    昨天面试,技术官问到了我如何使用BurpSuite抓取https网站的数据包,一时间没能回答上来(尴尬!).因为以前https网站的数据包我都是用Fiddler抓取的,Fiddlert自动帮我们配置好 ...

  3. 用python抓取求职网站信息

    本次抓取的是智联招聘网站搜索“数据分析师”之后的信息. python版本: python3.5. 我用的主要package是 Beautifulsoup + Requests+csv 另外,我将招聘内 ...

  4. 手把手视频:万能开源Hawk抓取动态网站

    Hawk是沙漠之鹰历时五年开发的开源免费网页抓取工具(爬虫),无需编程,全部可视化. 自从上次发布Hawk 2.0过了小半年,可是还是有不少朋友通过邮件或者微信的方式询问如何使用.看文档还是不如视频教 ...

  5. python3+beautifulSoup4.6抓取某网站小说(四)多线程抓取

    上一篇多文章,是二级目录,根目录"小说",二级目录"作品名称",之后就是小说文件. 本篇改造了部分代码,将目录设置为根目录->作者目录->作品目录- ...

  6. 在Scrapy项目【内外】使用scrapy shell命令抓取 某网站首页的初步情况

    Windows 10家庭中文版,Python 3.6.3,Scrapy 1.5.0, 时隔一月,再次玩Scrapy项目,希望这次可以玩的更进一步. 本文展示使用在 Scrapy项目内.项目外scrap ...

  7. [Python爬虫] 之二十二:Selenium +phantomjs 利用 pyquery抓取界面网站数据

    一.介绍 本例子用Selenium +phantomjs爬取界面(https://a.jiemian.com/index.php?m=search&a=index&type=news& ...

  8. python3+beautifulSoup4.6抓取某网站小说(三)网页分析,BeautifulSoup解析

    本章学习内容:将网站上的小说都爬下来,存储到本地. 目标网站:www.cuiweijuxs.com 分析页面,发现一共4步:从主页进入分版打开分页列表.打开分页下所有链接.打开作品页面.打开单章内容. ...

  9. python3+beautifulSoup4.6抓取某网站小说(一)爬虫初探

    本次学习重点: 1.使用urllib的request进行网页请求,获取当前url整版网页内容 2.对于多级抓取,先想好抓取思路,再动手 3.BeautifulSoup获取html网页中的指定内容 4. ...

随机推荐

  1. Android简易实战教程--第九话《短信备份~二》

    这一篇,承接地八话.使用高效的方式备份短信--xml序列化器. 存储短信,要以对象的方式存储.首先创建javabean: package com.itydl.createxml.domain; pub ...

  2. Android 5.1 添加硬件抽象层(HAL)和JNI接口总结

    点击打开链接

  3. Android的搜索框SearchView的用法-android学习之旅(三十九)

    SearchView简介 SearchView是搜索框组件,他可以让用户搜索文字,然后显示.' 代码示例 这个示例加了衣蛾ListView用于为SearchView增加自动补全的功能. package ...

  4. UNIX网络编程——心跳包

    所谓的心跳包就是在客户端和服务器端间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 一般是用来判断对方(设备,进程或其它网元)是否正常动行,一般采用定 ...

  5. UNIX网络编程——TCP回射服务器/客户端程序

    下面通过最简单的客户端/服务器程序的实例来学习socket API. serv.c 程序的功能是从客户端读取字符然后直接回射回去: #include<stdio.h> #include&l ...

  6. Mybatis源码之Statement处理器PreparedStatementHandler(五)

    PreparedStatementHandler就是调用PreparedStatement来执行SQL语句,这样在第一次执行sql语句时会进行预编译,在接下来执行相同的SQL语句时会提高数据库性能 源 ...

  7. Unity插件 - MeshEditor(三) 面片破碎&网格破碎

    网上的unity破碎插件很多,不过想着可以以自己的方式实现也不失为一种乐趣,虽然整体的表现性上显得有些差,但也并不会影响最终的效果,接下来我大致讲解一下破碎一个物体的流程,因为用到了协程计算碎片的原因 ...

  8. flume1.4.0 保存文件到hdfs错误调试

    报错如下 解决方案:将FLUME_HOME/lib目录下的jar文件,替换成HADOOP_HOME/share/hadoop/common/lib下版本更新的jar文件

  9. XML解析之SAX解析过程代码详解

    上一篇谢了解析原理和过程,这里应用代码直观认识这个原理: 新建Demo1类: import java.io.File; import javax.xml.parsers.SAXParser; impo ...

  10. 利用编辑距离(Edit Distance)计算两个字符串的相似度

    利用编辑距离(Edit Distance)计算两个字符串的相似度 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可 ...