项目实战 | *敏*感*词*带你获取某知识付费平台内容制作电子书(二)

优采云 发布时间: 2022-05-05 22:19

  项目实战 | *敏*感*词*带你获取某知识付费平台内容制作电子书(二)

  文章是txt形式的, 不支持插入图片

  不支持点击链接

  电子书文档没有目录

  加速制作电子书.

  这篇文章解决了几个问题

  可以生成pdf版本的电子书了

  支持插入图片,但只支持插入一张图片(后续怎么插入多张还需要研究,本人对Python中动态网页不是很熟, 有兴趣的朋友可以一起探讨)

  生成目录,方便查阅

  另外可以控制抓取普通帖子和精华帖子

  好了,开始我的表演, 先给效果图!

  

  准备好网页内容

  先做一个html网页模板,下面会介绍这个模板,这个模板中插入,标题,作者时间,正文,以及图片

      self.html_template = """<br />                        <br />                        <br />                        <br />                            <br />                        <br />                        <br />                        {title}<br />                        {author_time}<br />                        {text}<br />                                             <br />                        <br />                        <br />                        """<br /></p>

  接着用我们抓取到的标题,作者时间,正文,图片来填充这个模板,并把这些内容填充到一个内容数组中.

      if topic.get('type') == 'talk' and topic.get('talk'):  # 会话模式的<br />        text = topic.get('talk').get('text').replace('\n', '')  # 获取正文内容<br />        title = text[0:20] if len(text) > 20 else text<br />        author = topic.get('talk').get('owner').get('name')  # 获取作者名称<br />        create_time = (topic.get('create_time')[:20]).replace('T', ' ')  # 获取最后更新时间<br />        author_time = '{}在{}发表'.format(author, create_time)<br /><br />        images = topic.get('talk').get('images')  # 获取图片列表<br />        img = []<br />        if images is not None:<br />            for image in images:<br />                img = image.get('large').get('url')<br />            # img.append(image.get('large').get('url'))<br /><br />        title = title if len(title) > 0 else '无标题'<br />        html_content = self.html_template.format(title=title, author_time=author_time, text=text,<br />                                                 images=img)<br />        self.html_contents.append(html_content)<br />

  生成pdf版本的电子书,并带有目录

  把内容列表转换成文件列表,然后用pdfkit工具传化成pdf文件. 这里需要安装两个包一个是pdfkit,另一个是wkhtmltopdf,

  其中 wkhtmltopdf工具是一个exe文件,然后要指定这个文件

    self.config = pdfkit.configuration(<br />            wkhtmltopdf='C:/Program Files/wkhtmltopdf/bin/wkhtmltopdf.exe')  # 这里需要配置一下wkhtmlpdf.exe路径<br />

      # 下面是把内容列表转化成文件列表,然后用pdfkit转换成pdf文件,与此同时目录也会自动生成.<br />   def creat_pdf_file(self, group_title):<br />        htmls = []  # 这里是存放html文件<br /><br />        for index, file in enumerate(self.html_contents):<br />            html = '{}.html'.format(index)<br />            with open(html, 'w', encoding='utf-8') as f:  # 点击open函数查看用法,这里是写入不要搞错了<br />                f.write(file)<br /><br />            htmls.append(html)<br /><br />        try:<br />            output_file = 'D:/zsxq2/{}.pdf'.format(group_title)<br />            if not os.path.exists(output_file):  # 过滤掉重复文件<br />                pdfkit.from_file(htmls, output_file, configuration=self.config)  # 注意这里需要配置一下wkhtmltopdf<br />        except Exception as e:<br />            print(e)<br />

  插入图片

        self.html_template = """<br />                            <br />                            <br />                            <br />                                <br />                            <br />                            <br />                            {title}<br />                            {author_time}<br />                            <p>{text}<br />                               # 注意这里传入图片的url,但是怎么传入多张,我还没有弄明白,不是很熟动态插入代码                   <br />                            <br />                            <br />                            """<br /></p>

  这里向html模板中插入标题,作者与时间,然后帖子正文内容,以及图片

  html_content = self.html_template.format(title=title, author_time=author_time, text=text,<br />                                                                 images=img)<br />

  普通帖子与精华帖子

  很容易通过浏览器的调试模式找到普通帖子的链接,然后直接获取数据.这里我的函数中添加了一个type字段来控制是获取精华帖子还是普通帖子

   # 精华帖子<br />            url_content_essence = 'https://api.zsxq.com/v1.10/groups/{}/topics?scope=digests&count=20&end_time={}'.format(<br />                group_id,<br />                self.end_time)<br />            # 普通帖子<br />            url_content_normal = 'https://api.zsxq.com/v1.10/groups/{}/topics?count=20&end_time={}'.format(<br />                group_id,<br />                self.end_time)<br />            response = requests.get(url=url_content_essence if type > 0 else url_content_normal,<br />                                    headers=self.zsxq_headers)  # 一定要加headers,规范写法,就像过马路一样穿红灯有时没事,有时要命!<br />

  进一步优化

  其实我们知道,星球中很多内容是由链接构成的,而我们又知道pdf 支持链接的点击,所以我决定把链接加上.方便点击链接,另外像我加入了七十多个星球了,我想加快电子书制作速度,这里就要用到多线程. 还有每个帖子动态只插入了一张图片,其实帖子中可能有多张图片,这里我还需要进一步优化.

  总之要优化的就4个地方

  帖子中的链接文章

  电子书制作速度要加快

  星球动态的多张图片

  pdf文件没有标注页码

  后台回复交流群,进入我们的交流群,也可以加我微信,每天看我的朋友圈,都会有个人感悟分享!

  祝好!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线