项目实战 | *敏*感*词*带你获取某知识付费平台内容制作电子书(二)
优采云 发布时间: 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文件没有标注页码
后台回复交流群,进入我们的交流群,也可以加我微信,每天看我的朋友圈,都会有个人感悟分享!
祝好!