最近在研究网络安全相关知识,看到乌云知识库有很多高质量文章,由于在网上一篇篇翻看过去太麻烦,就研究了一下用Calibre自己编写recipe自动下载并生成电子书的方法。

花了点时间用此方法将乌云知识库上截止2015年2月11日为止的400多篇文章整理成了一本epub格式的电子书,不愿折腾的可以直接点击——乌云知识库博客汇总——下载。

工具简介和准备

Calibre

Calibre是一个“一站式”的电子书解决方案,它可以全面满足你的电子书需求。Calibre是免费的,源代码开放,拥有跨平台的设计,可在Linux, OS X和Windows操作系统中运行。
  它是一个完整的电子图书馆,包括图书馆管理,格式转换,新闻,将材料转换为电子书,以及电子书阅读器同步功能、整合进电子图书阅读器。

此处我们用到的是Calibre的command line tools中的ebook-convert功能,请前往此处下载安装。

Mac下该工具已包含在安装包中,用户在使用前请执行export PATH="$PATH:/Applications/calibre.app/Contents/MacOS/"将cli tools路径加入系统路径,或将此句加入.bashrc

其他系统暂未测试,欢迎留言补充说明。

Chrome

使用开发者工具来分析页面结构,用来在recipe中指定下载的内容。

制作过程

分析页面结构

先到乌云知识库页面查看。

从页面底部的信息可以看到该知识库由wordpress生成,总共47页。
点击发现每一个目录页的格式形如http://drops.wooyun.org/page/2

任选一个标题,点击右键——审查元素。

标题结构如下:

<h2 class="entry-title"><a href="http://drops.wooyun.org/binary/4788" rel="bookmark" title="Permanent Link to “暗云”BootKit木马详细技术分析">“暗云”BootKit木马详细技术分析</a>
</h2>

可以找到规律,标题的共同特征是包含在<h2 class="entry-title">中,链接地址在其中的href中,标题内容为<a>中包含的内容。

任意点开一篇具体的文章,用同样的方法可以发现,每篇文章的正文部分是在如下的标签中。

<div id="post-4788" class="post">

编写recipe

calibre的recipe本质上是一个python文件,通过继承一个类,在其中指定一些电子书元数据和从网页提取内容的方法来达到自动下载和整合成电子书的目的。内容筛选主要通过Beautiful Soup实现。该任务中使用的recipe如下,其它参考链接包括:

  • 抓取网页内容生成Kindle电子书
  • 官方提供的recipe文件,可以用来参考recipe写法
  • Beautiful Soup中文文档
  • calibre API
#!/usr/bin/python
# encoding: utf-8
from calibre.web.feeds.recipes import BasicNewsRecipeclass wooyun(BasicNewsRecipe):title = u'乌云知识库'__author__ = u'无关风月'description = u'''乌云知识库,最专业的安全知识分享平台。本电子书由无关风月整理网站 <http://drops.wooyun.org/> 内容而来。'''timefmt = '[%Y-%m-%d]'no_stylesheets = TrueINDEX = 'http://drops.wooyun.org/'# auto_cleanup = True                   # 如果没有手动分析文章结构,可以考虑开启该选项自动清理正文内容language = 'zh-CN'keep_only_tags = [{'class': ['post']}]  # 仅保留文章的post中的内容,其中为自己分析得到的正文范围max_articles_per_feed = 10000           # 默认最多文章数是100,可改为更大的数字以免下载不全def parse_index(self):# soup = self.index_to_soup(self.INDEX)# pages_info = soup.findALL(**{'class': 'pages'}).text.split()# print 'pages_info:', pages_infostart_page = 1      # int(pages_info[1])end_page = 47       # int(pages_info[3])articles = [] for p in range(start_page, end_page+1):     # 处理每一个目录页soup_page = self.index_to_soup(self.INDEX + '/page/' + str(p))soup_titles = soup_page.findAll(**{'class': 'entry-title'})     # 从目录页中提取正文标题和链接for soup_title in soup_titles:href = soup_title.aarticles.append({'title': href['title'][18:], 'url': href['href']}) print 'page %d done' % particles.reverse()                 # 文章倒序,让其按照时间从前到后排列res = [(u'乌云知识库', articles)]    # 返回tuple,分别是电子书名字和文章列表# self.abort_recipe_processing('test')  # 用来中断电子书生成,调试用return res

生成电子书

将上述文件保存成wooyun.recipe,在终端中执行命令:

ebook-convert wooyun.recipe wooyun.epub

然后你就可以去喝杯水,等待calibre自动将博客处理成电子书了。此处的epub也可以改成其它格式,如mobi

参考链接

  • 抓取网页内容生成Kindle电子书
  • 官方提供的recipe文件,可以用来参考recipe写法
  • Beautiful Soup中文文档
  • calibre API
  • 乌云知识库博客汇总(epub格式)
  • Chrome 开发者工具教程

用calibre抓取乌云知识库并生成电子书相关推荐

  1. 用calibre抓取RSS新闻制作电子书及推送到kindle

    calibre可以从RSS源抓取内容,转换成它所支持格式的电子书,还可以推送到阅读器设备.下面来看看在calibre图形界面和命令行下如何实现这些功能. 在图形界面抓取新闻 自定义新闻来源 看看我们自 ...

  2. 【转】 asp.net从视频文件中抓取一桢并生成图像文件的方法 实现多语言本地化应用程序 自动返回上次请求页面...

    asp.net从视频文件中抓取一桢并生成图像文件的方法 http://www.bianceng.cn/webkf/aspx/201012/21428.htm WebUIValidation.js ht ...

  3. 企业做图表,不会字典数据抓取,告别手动生成字典绘图

    企业做图表,不会字典数据抓取,告别手动生成字典绘图 import csv with open('GDP_MAP.csv','r') as csvfile:reader=csv.reader(csvfi ...

  4. python代码案例详解-我用Python抓取了7000 多本电子书案例详解

    安装 安装很简单,只要执行: pip install requests-html 就可以了. 分析页面结构 通过浏览器审查元素可以发现这个电子书网站是用 WordPress 搭建的,首页列表元素很简单 ...

  5. Python 抓取知识星球内容生成词云并生成 PDF

    知识星球是什么? 知识星球是创作者连接铁杆粉丝,做出高品质社群,实现知识变现的工具.创作者可以用知识星球连接铁杆粉丝,做出高品质社群,实现知识变现. 以上来自知识星球官网的介绍 https://hel ...

  6. Python网络爬虫:抓取书籍排行榜 并生成HTML网页

    Hello,大家好,我是wangzirui32,我们来学习如何抓取书籍排行榜,并生成HTML网页,开始学习吧! 文章目录 1. 分析HTML 2. 爬虫程序 3. 生成HTML网页 3.1 rende ...

  7. csv文件操作和爬虫抓取豆瓣影评并生成词云图

    1. csv文件操作 csv文件windows默认是excel打开的,是一种表格式文件 import csv #导入csv的库 # 一次写入多行文本时,会多换一行,可以设置newline=" ...

  8. 【数据分析大作业 爬虫+数据清洗+可视化分析】Python抓取视频评论并生成词云、情感指数柱状图、性别比例饼图及评论信息表格

    目录 一些将BV号转化为AV号的变量设置 词云屏蔽词设置 使用代理IP(直接从IP网站复制的) 爬虫的函数 将结果写入表格中 下面是主函数,首先看看能不能抓取到,还有一些变量设置 开始循环爬评论 对一 ...

  9. 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23866427 今天又遇到一个网页数据抓取的任务,给大家分享下. 说道网页信息抓取 ...

最新文章

  1. php pdo 中文乱码,php pdo oracle中文乱码的快速解决方法
  2. 在 Python 中妙用短路机制
  3. 华为代码质量军规 (1) 数组访问,必须进行越界保护
  4. 【转】CSS 与 HTML5 响应式图片
  5. java api 英文_教你查阅Java API 英文文档(JDK 11)
  6. 将sklearn训练速度提升100多倍,美国「返利网」开源sk-dist框架
  7. mysql 存入图_c# 如何向mysql数据库中存入图片
  8. APP如何进行通信的
  9. java cookie共享_cookie共享
  10. java 数据类型转换的一场_Java数据类型之间的转换
  11. 面试中遇见的一些考试题目
  12. VIBE算法(一)——论文翻译
  13. vue实现倒计时60秒
  14. PS 将签名背景修改为透明色
  15. JS中如何设置背景图片?
  16. mysql ansi unicode_ANSI与Unicode编码
  17. C语言实现计算数的整数次幂
  18. 金仓数据库KingbaseES中 ksql常用命令总结
  19. struct 结构体的内存对齐
  20. Linux如何卸载slurm,在Ubuntu 16.04桌面上安装/模拟SLURM:slurmd无法启动

热门文章

  1. 如何将二维空间先验注入到ViT中? UMA港理工阿里提出SP-ViT,为视觉Transformer学习2D空间先验知识!...
  2. c语言常量换行符,C语言中换行符问题
  3. nginx 报错502 bad Gateway
  4. 攻防世界-PWN-Challenge-Wirteup
  5. 链表逆置详细讲解(图文)
  6. [海绵城市]透水铺装、调蓄设施与控制指标关系整理
  7. delete 和 delete[]真正区别
  8. typing‘ has no attribute ‘_SpecialForm‘
  9. thinkphp5第三方合同在线签署接口(放心签)demo
  10. 【id:56】【20分】A. 距离计算(友元函数)