前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目实战 | 手把手获取某知识付费内容做成电子书(完结篇)

项目实战 | 手把手获取某知识付费内容做成电子书(完结篇)

作者头像
龙哥
修改2019-08-07 16:26:21
1.3K0
修改2019-08-07 16:26:21
举报
文章被收录于专栏:Python绿色通道Python绿色通道

三个问题:

  1. 帖子中的链接文章
  2. 星球动态的多张图片
  3. pdf文件没有标注页码

其中pdf标注页码,没有做,因为pdf文件本身就自带了页码功能,所以做的必要性不是很大.

先看效果图

三个星球

效果图带超链接与图片

效果图多张图片展示

开始正文:

在模板中把链接与图片插入

这里要先构建好模板,多张图片与多个超链接,都可以用一个字符串填充,特别注意
self.html_template = """                    <!DOCTYPE html>                    <html lang="en">                    <head>                        <meta charset="UTF-8">                    </head>                    <body>                    <h1>{title}</h1>                    <h3>{author_time}</h3>                    <p style='font-size:20px'>正文内容:<br>{text}</p>                    <p style='font-size:20px'>相关链接:<br>{hrefs}</p> # 这里也是一个字符串,可以放多条链接,后面会讲到                    <p style="text-align:center">{images}</p>   # 这个images是一个字符串,可以放多张图片          
                    </body>                    </html>                    """左右滑动,查看代码

如何插入多个超链接

  1. 知识星球的用户肯定知道,帖子中的超链接是可以点击的,另外pdf中的超链接也是可以点击的,所以我就想星球中的超链接也能在pdf文档中点击.
  2. 通过获取星球的内容可以知道 星球的text字段中包含了 一个标签,这个标签有三个属性,其中一个是<e type = 'web' href='' title = ''> 我只需要取出这个属性中的href与 title就行了
  3. 因为这个href与title 已经通过url编码了,所以这里我需要解码一下,其中用urllib.parse.unquote来解码, 因为一个动态中可能有多个web标签,所以我这里遍历一下.
  4. 把得到的 hrefs 转换成字符串的超链接,然后直接填充就可以展示出来
def get_tag_web(self, content):
        """处理一下e标签内容, 主要是web链接有点用处,所以这里只处理web链接"""
        soup = BeautifulSoup(content, 'html.parser')
        list_e = soup.find_all('e')  # 获取 <e>标签列表
        hrefs = []

        if list_e:
            for e in list_e:
                if e['type'] == 'web':  # 这里只处理web超链接
                    hrefs.append('<a href="{}">{}</a>'.format(parse.unquote(e['href']), parse.unquote(e['title']))) # 解码和提取 <e > 标签中的 href与 title

        return ''.join(hrefs) if len(hrefs) > 0 else '无'

左右滑动,查看代码

把得到的结果填充到模板中去即可

如何插入多张图片

  1. 这里要考虑到talk模式中有多张图片,以及q&a模式也有图片,所以这里直接用一个方法处理了,图片都在images列表中, 另外注意 topic.get('talk').get('images') 取到的列表,而不是对象,不能直接append,我在这里犯错找了好久
  2. 遍历图片集合,然后拼接一个html模式的字符串,把图片插入,即可显示多张图片
  3. 最后把imgs列表转换成字符串,然后传入模式中即可
def get_all_imgs(self, topic):
        """获取帖子中的图片"""
        images = []

        if topic.get('talk') and topic.get('talk').get('images'):  # 会话模式的
            images += topic.get('talk').get('images')  # 获取图片列表

        if topic.get('question') and topic.get('question').get('images'):  # 问题模式
            images += topic.get('question').get('images')  # 获取图片列表

        if topic.get('answer') and topic.get('answer').get('images'):  # 回答模式
            images += topic.get('answer').get('images')  # 获取图片列表

        try:
            imgs = []
            if images is not None:
                for image in images:
                    imgs.append(
                        '<img src = {} ,style = "text-align:center,width:400px,height:300px">'.format(
                            image.get('large').get('url')))  # 获取原图

                return ''.join(imgs)
            else:
                return ''
        except Exception as e:
            print(e.args)
            return ''

左右滑动,查看代码

最后小结

就这样制作知识星球电子书就基本完成了,再回头看看我完成了那些功能

  1. 登录获取当前用户所加入的所有星球
  2. 抓取星球帖子内容,包括图片,超链接,文字
  3. 制作电子书,电子书有目录,有标题,有作者与创作时间,正文,以及相关的图片与超链接,并且这些超链接是可以点击打开新网页的

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在模板中把链接与图片插入
  • 如何插入多个超链接
  • 如何插入多张图片
  • 左右滑动,查看代码
  • 最后小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档