文章目录

  • 为什么做知乎回答的导出?
  • 实现环境
  • 源代码
  • PDF导出测试结果

为什么做知乎回答的导出?


“恰同学少年,风华正茂;

书生意气,挥斥方遒。

指点江山,激扬文字…”

知乎上总有许多令人眼前一亮、深入浅出的人类高质量回答,它们往往从读者少有或从未注意过的角度深入问题,从而引出新的观点。

遇到这种随时可能被折叠or删除的回答,收集癖怎么可能坐得住?!

于是花一晚上堆出了一段优雅而不失暴力的代码,用于实现知乎回答一键导出为PDF。


实现环境


CPU :Intel® Core™ i7-9750H CPU @ 2.60GHz

wkhtmltopdf安装位置 :N:\wkhtmltox\bin\wkhtmltopdf.exe

Windows :Win10 家庭版

PyCharm :2020.1.1 (Community Edition) Build #PC-201.7223.92, built on April 30, 2020

测试回答链接 :https://www.zhihu.com/question/463243373/answer/1983723459


源代码


由于急着用所以写的比较简陋,其中很多地方写的都十分暴力(例如“知乎图床重处理”部分就可以用BeautifulSoap库去实现等等),针对形如“https://www.zhihu.com/question/问题编号/answer/回答编号”可实现就行啦。

后续有空可能会加入多网址多线程解析导出PDF单问题所有高赞回答导出PDF收藏夹下所有回答导出PDF适用其他图文发布网站的解析导出等。

现存问题:图文排版可能出现问题、未做登录cookie、基本没啥robustness

来看代码实现吧:

# -*- coding: utf-8 -*-
"""
ZhihuCapture.py
@author: Felerdise
"""
# 无需多言的导入,其中time仅用于导出计时
import requests
import re
import pdfkit
import time
def GetZhiHuAnswer(url):# 浏览器标识设置为Chrome,有效去除冗余组件header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36"}r = requests.get(url, headers=header)r.encoding = 'utf-8'html = r.text# 去冗余:对html数据暴力处理# Answer中的大量冗余脚本<script>if ZhiHuAnswer:html = html[0: html.find(r'<script id="js-initialData"')]# 登录html = html.replace(r'"Question-mainColumnLogin"', r'"Question-mainColumnLogin" style="display:none"',html.count(r'"Question-mainColumnLogin"'))html = html.replace(r'"AppHeader-userInfo"', r'"AppHeader-userInfo" style="display:none"',html.count(r'"AppHeader-userInfo"'))# 查看所有回答html = html.replace(r'"Card ViewAll"', r'"Card ViewAll" style="display:none"', html.count(r'"Card ViewAll"'))# 知乎app定向html = html.replace(r'"ModalWrap"', r'"ModalWrap" style="display:none"', html.count(r'"ModalWrap"'))# 图片懒加载# 知乎图床重处理(此处储存的是品质略差的图片)html = re.sub(r'<noscript>.*?</noscript>', '', html)ImgObj = re.findall(r'<img .*?/>', html)for item in ImgObj:if r'data-actualsrc' in item:srcObj = re.findall(r'src="(.*?)"', item)[0]actualObj = re.findall(r'data-actualsrc="(.*?)"', item)[0]html = html.replace(srcObj, actualObj, 1)# 专栏收录文章if ZhiHuZhuanLan:html = html.replace(r'Post-Sub Post-NormalSub"', r'Post-Sub Post-NormalSub" style="display:none"', html.count(r'Post-Sub Post-NormalSub"'))# 提取标题searchObj = re.search(r'<title data-react-helmet="true">(.*?)</title>', html)titleOverall = searchObj.group(1)# 以源码输出PDF# 设置wkhtmltopdf.exe路径(此处为绝对路径,请根据相应安装位置调整)try:config = pdfkit.configuration(wkhtmltopdf=r'N:\wkhtmltox\bin\wkhtmltopdf.exe')except:print("Error: ExeDirectionError")return# 设置输出格式option = {'quiet': '','page-size': 'Letter','dpi': '300','disable-smart-shrinking': '','margin-top': '0in','margin-right': '0in','margin-bottom': '0in','margin-left': '0in','encoding': "UTF-8",# 'custom-header': [# ],# 'cookie': [# ],'no-outline': None,# 'javascript-delay': '',}# html输出PDFtry:pdfkit.from_string(html, "{}.pdf".format(titleOverall), configuration=config, options=option)except:print("Error: PDFGenerateError")return
ZhiHuAnswer = False
ZhiHuZhuanLan = Falseif __name__ == '__main__':keyword = input('输入待解析的知乎答案网址:\n').strip('\r\n')# keyword = 'https://www.zhihu.com/question/463243373/answer/1983723459'# 多网址数据,多线程# if '\n' in keyword:#     keyword = keyword.split('\n')#     passTimeStart = time.time()# 这里本是想做拓展的if 'zhihu' in keyword:if 'answer' in keyword:ZhiHuAnswer = True# GetZhiHuAnswer(keyword)elif 'zhuanlan' in keyword:ZhiHuZhuanLan = True# GetZhiHuAnswer(keyword)ZhiHuCaptor(keyword)else:passTimeLapse = time.time() - TimeStartprint('Time used: {:.2f}s'.format(TimeLapse))

PDF导出测试结果


截取了头尾与中部三个部分的导出PDF截图以示意。





到此为止啦,日常瞎写的小工具(づ。◕‿‿◕。)づ

测试回答链接生成的PDF中,字数为5000+字、图片数量为10+张、PDF导出用时为8.50s

用于展示PDF导出结果的截图等若涉侵权,请第一时间告知我,我将修改文中的侵权内容

知乎回答一键导出为PDF——Python实现相关推荐

  1. 手把手教你打造自己的简历编辑网站-编辑完后可以一键导出为PDF

    如何打造自己的简历编辑网站 目录 如何打造自己的简历编辑网站 一.相关环境配置 A.服务器环境 B.服务器面板 二.相关软件安装 A.安装Node.js B.安装yarn 三.部署简历网站 A.开始安 ...

  2. 【Python】将微信收藏的文章批量导出为pdf

    [Python]将微信收藏的文章批量导出为pdf 第一步:导出微信收藏的链接 第二步:将所有网址导出为pdf 写在前面 微信收藏了大量的文章,一直没时间看.乘飞机或火车时有闲暇时间但网络不行.本文提供 ...

  3. Python使用matplotlib可视化绘制并通过Tkinter生成按钮将可视化结果导出为pdf文件

    Python使用matplotlib可视化绘制并通过Tkinter生成按钮将可视化结果导出为pdf文件 目录 Python使用matplotlib

  4. python生成excel表格-Python实现将数据库一键导出为Excel表格的实例

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...

  5. python如何读取数据并输出为表格_Python实现将数据库一键导出为Excel表格的实例...

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...

  6. python爬取知乎回答并进行舆情分析:爬取数据部分

    python爬取知乎回答并进行舆情分析:爬取数据部分 背景 Ajax原理介绍 Request URL分析 json报文结构分析 代码 参考链接 背景 近期导师让我从社交媒体平台(包括微博.知乎.贴吧等 ...

  7. Python 网络爬虫实战:爬取知乎回答中的全部图片

    平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...

  8. python数据导出excel模板中的脚本_Python实现将数据库一键导出为Excel表格的实例...

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...

  9. 基于Python知乎回答爬虫 +jieba关键字统计可视化

    单纯对知乎一个问题较感兴趣,爬了6100多答案,分析统计关键字 python版本:3.8 效果例子:https://www.zhihu.com/question/52178718/answer/135 ...

最新文章

  1. python中 str 和 repr_python repr()与str()区别总结
  2. 用 Linux 的 watch 命令观察命令和任务
  3. 【iBoard电子学堂】【iCore双核心板】资料光盘A盘更新,版本号为A6
  4. pci配置基地址_PCIe扫盲——基地址寄存器(BAR)详解
  5. mysql创建gbk库_MYSQL创建utf-8和GBK格式数据库
  6. jzxx1000~1010题分析
  7. “Talk is cheap, show me the code”你一行代码有多贵?
  8. 里签名boot有什么用_为什么大家都用苹果企业签名呢?
  9. [深度学习] loss不下降的解决方法
  10. python找到二维数据矩阵中的最大最小值直接使用min、max函数
  11. 十大机器学习算法(一)
  12. 中国移动科普:为什么手机移动网络要叫 “蜂窝移动网络”
  13. 《等一朵花开》读书感悟
  14. 程序员的未来之路[转]
  15. 速写中的颈部肌肉怎么表现?详细画法看这里~
  16. OBD系统系族分类规则
  17. typora免费版,无需破解,安装直接使用
  18. hulu技术宣讲|西安电子科技大学专场
  19. XP系统启动时滚动条总是时间很长
  20. 全国计算机考试第五套,计算机等级一级MS Office考试考题:第五套字处理题

热门文章

  1. 自己动手实现fft.m函数
  2. Windows将鼠标单击转换为双击的原理
  3. 如何利用编程思维,提高英语成绩?
  4. 数据中心机房精密空调制冷量的估算
  5. Spring中添加自定义标签
  6. 国华小状元1号年金险怎么样?好不好?
  7. MYSQL 如何得到两个日期间的工作日(不含周六日,节假日)
  8. 面向对象编写一个计算器
  9. vim只读模式修改文件
  10. android手机更改手机密码,手机忘记密码如可解决 安卓手机重置密码教程【详解】...