用calibre抓取乌云知识库并生成电子书
2015-02-11 21:56
926 查看
最近在研究网络安全相关知识,看到乌云知识库有很多高质量文章,由于在网上一篇篇翻看过去太麻烦,就研究了一下用Calibre自己编写
花了点时间用此方法将乌云知识库上截止2015年2月11日为止的400多篇文章整理成了一本epub格式的电子书,不愿折腾的可以直接点击——乌云知识库博客汇总——下载。
它是一个完整的电子图书馆,包括图书馆管理,格式转换,新闻,将材料转换为电子书,以及电子书阅读器同步功能、整合进电子图书阅读器。
此处我们用到的是Calibre的command line tools中的ebook-convert功能,请前往此处下载安装。
Mac下该工具已包含在安装包中,用户在使用前请执行
其他系统暂未测试,欢迎留言补充说明。
从页面底部的信息可以看到该知识库由wordpress生成,总共47页。
点击发现每一个目录页的格式形如
任选一个标题,点击右键——审查元素。
标题结构如下:
可以找到规律,标题的共同特征是包含在
任意点开一篇具体的文章,用同样的方法可以发现,每篇文章的正文部分是在如下的标签中。
编写
calibre的recipe本质上是一个python文件,通过继承一个类,在其中指定一些电子书元数据和从网页提取内容的方法来达到自动下载和整合成电子书的目的。内容筛选主要通过Beautiful Soup实现。该任务中使用的recipe如下,其它参考链接包括:
抓取网页内容生成Kindle电子书
官方提供的recipe文件,可以用来参考recipe写法
Beautiful Soup中文文档
calibre API
然后你就可以去喝杯水,等待calibre自动将博客处理成电子书了。此处的
官方提供的recipe文件,可以用来参考recipe写法
Beautiful Soup中文文档
calibre API
乌云知识库博客汇总(epub格式)
Chrome 开发者工具教程
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 BasicNewsRecipe class wooyun(BasicNewsRecipe): title = u'乌云知识库' __author__ = u'无关风月' description = u'''乌云知识库,最专业的安全知识分享平台。本电子书由无关风月整理网站 <http://drops.wooyun.org/> 内容而来。''' timefmt = '[%Y-%m-%d]' no_stylesheets = True INDEX = '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_info start_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)) ad8d soup_titles = soup_page.findAll(**{'class': 'entry-title'}) # 从目录页中提取正文标题和链接 for soup_title in soup_titles: href = soup_title.a articles.append({'title': href['title'][18:], 'url': href['href']}) print 'page %d done' % p articles.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 开发者工具教程
相关文章推荐
- Python 抓取「知识星球」内容生成电子书
- PHP抓取新浪读书频道的小说,生成电子书
- 抓取网页内容生成kindle电子书
- 用Calibre抓取博客,新闻等,制作成电子书
- 抓取网页内容生成Kindle电子书(转)
- 【转】 asp.net从视频文件中抓取一桢并生成图像文件的方法 实现多语言本地化应用程序 自动返回上次请求页面
- 使用爬虫抓取网易云音乐热门评论生成好玩的词云
- 基于文件夹目录生成CHM电子书
- ASP.NET上传视频文件同时转换为flv并且抓取第一帧生成图片
- python抓取javascript动态生成HTML内容的实践
- asp生成静态页面(抓取动态页面 生成静态文件)
- Kindle 电子书生成工具
- htmlunit+quartz定时抓取博文并生成jsp页面
- 抓取 题目描述 生成 解题报告 模板 python
- Python3抓取javascript生成的html网页
- (1)生成(抓取)和显示(解释)执行计划
- 教你在 Linux 上使用 Calibre 创建电子书
- Node.js+jade抓取博客所有文章生成静态html文件的实例
- scrapy结合webkit抓取js生成的页面