抓取网页生成电子书(乌云知识库博客汇总——下载格式的电子书)

优采云 发布时间: 2021-09-13 20:02

  抓取网页生成电子书(乌云知识库博客汇总——下载格式的电子书)

  最近在学习网络安全相关知识。看到五云知识库有很多优质的文章。由于网上看文章太麻烦,研究了Calibre写的菜谱,自动下载生成电子书的方法。

  用这种方法把截至2015年2月11日五云知识库上的400多篇文章文章整理成epub格式的电子书花了一些时间。不想折腾的可以直接点击——五云知识库总结博客-下载。

  工具介绍和准备Calibre

  Calibre 是“一站式”电子书解决方案,完全可以满足您的电子书需求。 Calibre 是免费的,源代码是开放的,具有跨平台设计,可以在 Linux、OS X 和 Windows 操作系统上运行。

  是一个完整的电子图书馆,包括图书馆管理、格式转换、新闻、资料转电子书,以及电子书阅读器同步和集成到电子书阅读器的功能。

  这里我们使用的是 Calibre 命令行工具中的 ebook-convert 功能,请到这里下载安装。

  Mac 下的工具收录在安装包中。使用该工具前,请执行export PATH="$PATH:/Applications/calibre.app/Contents/MacOS/"将cli工具路径添加到系统路径中,或者在.bashrc中添加这一句。

  其他系统尚未测试,请留言补充说明。

  铬

  使用开发者工具分析页面结构并在配方中指定下载的内容。

  *敏*感*词*分析页面结构

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

  

  从页面底部的信息可以看到知识库是wordpress生成的,共47页。

  点击查看每个目录页的格式。

  

  选择标题,右键单击查看元素。

  

  标题结构如下:

  可以找到规则。标题的共同特征是收录在,链接地址在href中,标题内容就是收录的内容。

  任意点打开一个特定的文章,用同样的方法发现每个文章的body都在下面的标签中。

  写菜谱

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

  #!/usr/bin/python

# encoding: utf-8

from calibre.web.feeds.recipes import BasicNewsRecipe

class wooyun(BasicNewsRecipe):

title = u'乌云知识库'

__author__ = u'无关风月'

description = u'''乌云知识库,最专业的安全知识分享平台。本电子书由无关风月整理网站 内容而来。'''

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))

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。

  参考链接

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线