下载知乎指定问题的答案并保存图片

Posted shubin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下载知乎指定问题的答案并保存图片相关的知识,希望对你有一定的参考价值。

代码如下:


from zhihu_oauth import ZhihuClient

from zhihu_oauth.exception import NeedCaptchaException
from docx import Document
from docx.shared import Inches
from w3lib.html import remove_tags
import urllib.request
from io import StringIO
import subprocess
import re
document = Document()
client = ZhihuClient()


try
: client.login(username, pass) except NeedCaptchaException: # 保存验证码并提示输入,重新登录 with open(a.gif, wb) as f: f.write(client.get_captcha()) captcha = input(please input captcha:) client.login([email protected], 1818039565, captcha) p = re.compile(<img.*>) num = input(请输入问题序号:) question = client.question(int(num)) i = 0; file = open(question.title+.html,w) file.write(<html><head></head><body>) # document.add_heading(question.title, 0) file.write(<h1>+question.title+</h1>) for answer in question.answers: # print(question.answers[0].content.replace(‘<br>‘,‘\n‘)) # print(question.answers[0].voteup_count) print(answer.author.name) # document.add_paragraph("回答者:"+answer.author.name+‘\t‘+‘赞数:‘+str(answer.voteup_count), style=‘IntenseQuote‘) # document.add_paragraph(remove_tags(answer.content, keep=(‘img‘,))) # document.add_page_break() file.write(<br><br>+"回答者:"+answer.author.name+&nbsp;&nbsp;+赞数:+str(answer.voteup_count)) file.write(<p>+answer.content+</p>) i=i+1 if(i>50): break #document.save(str(question.title)+‘.docx‘) file.write(</body></html>) file.close() subprocess.call([pandoc,question.title+.html,-o,question.title+.docx]) subprocess.call([rm,-rf,question.title+.html])

参考资料:https://github.com/7sDream/zhihu-oauth

这段代码主要利用zhihu-oauth实现对知乎内容的获取,这个项目很好的对知乎的API进行了封装并且非常容易的实现知乎的各种操作。

在Ubuntu系统下通过

pip install -U zhihu_oauth

可以安装zhihu_oauth模块。为以后下载做好准备。

 

在下载知乎文章中主要遇到的问题是,不好处理图片。

当直接将content保存到docx中的时候,会直接将<img>标签保存到docx中,不好处理。后来在issue中找到了比较好的解决方案。

一种解决方案是直接保存成html然后用pandoc转码。具体的代码实现可以参考上面的代码。

 

以上是关于下载知乎指定问题的答案并保存图片的主要内容,如果未能解决你的问题,请参考以下文章

下载图片,并保存到指定大小和清晰度

实验:用Unity抓取指定url网页中的所有图片并下载保存

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

如何在不使用意图的片段中拍摄和保存图片?

#VSCode保存插件配置并使用 gist 管理代码片段