投稿    登录
  博主录制的Python3爬虫视频教程已发布!详情请戳Python3爬虫视频教程!希望大家支持!非常感谢!

获取知乎问题答案并转换为MarkDown文件

Python 四毛 4163浏览 4评论

20170609 更新:

感谢一介草民与ftzz的反馈

(1) 修复中文路径保存问题

(2) 修复offset问题

(3) 修复第一个问题

来个好玩的东西

获取知乎问题答案并转换为MarkDown文件 获取知乎问题答案并转换为MarkDown文件 获取知乎问题答案并转换为MarkDown文件

20170607 更新:

(1) 感谢Ftzz提醒, 将图片替换为原图

(2) 将文件保存到本地,解决了最大的缺点问题,不用联网也可以看了

 

大家好,我是四毛。

写在前面的话

在开始前,给大家分享一个前段时间逛Github时看到的某个爬虫脚本中的内容:

所以,大家爬网站的时候,还是友善一点为好,且爬且珍惜啊。

好了,言归正传。

今天主要讲一下如何将某一个知乎问题的所有答案转换为本地MarkDown文件。

前期准备

python2.7

html2text

markdownpad(这里随意,只要可以支持md就行)

会抓包。。。。。

最重要的是你要有代理,因为知乎开始封IP了

1.什么是MarkDown文件

Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处理软件 WordPages 有大量的排版、字体设置。它使我们专心于码字,用「标记」语法,来代替常见的排版格式。例如此文从内容到格式,甚至插图,键盘就可以通通搞定了。

恩,上面是我抄的,哈哈。想多了解的可以看看这里

2.为什么要将答案转为MarkDwon

因为。。。。。。懒,哈哈,开个玩笑。最重要的原因还是markdown看着比较舒服。平时写脚本的时候,也一直在思考一个问题,如何将一个文字与图片穿插的网页原始的保存下来呢。如果借助工具的话,那就很多了,CTRL+P  打印的时候,选择另存为PDF,或者搞个印象笔记,直接保存整个网页。那么,我们如何用爬虫实现呢?正好前几天看到了这个项目,仔细研究了一下,大受启发。

3.原理

原理说起来很简单:获取请求到的内容的BODY部分,然后重新构建一个HTML文件,接着利用html2text这个模块将其转换为markdown文件,最后对图片及标题按照markdown的格式做一些处理就好了。目前应用的场景主要是在知乎。

4.Show Code

    4.1获取知乎答案

写代码的时候,主要考虑了两种使用场景。第一,获取某一特定答案的数据然后进行转换;第二,获取某一个问题的所有答案进行然后挨个进行转换,在这里可以 通过赞同数来对要获取的答案进行质量控制。

    4.1.1、某一个特定答案的数据获取

url:https://www.zhihu.com/question/27621722/answer/48658220(前面那个是问题ID,后边的是答案ID)

这一数据的获取我这里分为了两个部分,第一部分请求上述网址,拿到答案主体数据以及赞同数,第二部分请求下面这个接口:

https://www.zhihu.com/api/v4/answers/48658220

为什么会这样?因为这个接口得到的答案正文数据不是完整数据,所以只能分两步了。

     4.1.2、某一个特定答案的数据获取

这一个数据就可以通过很简单的方式得到了,接口如下:

https://www.zhihu.com/api/v4/questions/27621722/answers?sort_by=default&include=data%5B%2A%5D.is_normal%2Cis_collapsed%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Cmark_infos%2Ccreated_time%2Cupdated_time%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B%2A%5D.author.follower_count%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit=20&offset=3

返回的都是JSON数据,很方便获取。但是这里有一个地方需要注意,从这里面取的答案正文数据就是文本数据,不是一个完整的html文件,所以需要在构造一下。

    4.1.2、保存的字段

author_name 回答用户名
answer_id  答案ID
question_id 问题ID
question_title  问题
vote_up_count  赞同数
create_time  创建时间

答案主体

 

    4.2 Code

主脚本:zhihu.py

zhihu.py为主脚本,内容很简单,发起请求,调用解析函数进行解析,最后再进行保存。

解析函数脚本:parse_content.py

parse_content.py主要负责构造新的html,然后对其进行解析,获取数据。

5.测试结果展示

恩,下面还有,就不截图了。

6.缺点与不足

下面聊一聊这种方法的缺点:

这种方法的最大缺点就是:

一定要联网!

一定要联网!

一定要联网!

因为。。。。。。 在md文件中我们只是写了个图片的网址,这就意味着markdown的编辑器帮我们去存放图片的服务器上对这个图片进行了获取,所以断网也就意味着你看不到图片了;同时也意味着如果用户删除了这张图片,你也就看不到了。

但是,后来我又发现在markdownpad中将文件导出为html时,即使是断网了,依然可以看到全部的内容,包括图片,所以如果你真的喜欢某一个答案,保存到印象笔记肯定是不错的选择,PDF直接保存也不错,如果是使用了这个方法,记得转为html最好。

还有一个缺点就是html2text转换过后的效果其实并不是特别好,还是需要后期在进行处理的。

7.总结

代码还有很多可以改进之处,欢迎大家与我交流:QQ:549411552 (注明来自静觅)

国际惯例:代码在这

收工。

 

 

 

 

 

 

 

转载请注明:静觅 » 获取知乎问题答案并转换为MarkDown文件

喜欢 (22)or分享 (0)

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

想结交更多的朋友吗?

来进击的Coder瞧瞧吧

进击的Coder

QQ群号 99350970 立即加入

进击的Coder灌水太多?

这里是纯粹的技术领地

激进的Coder

QQ群号 627725766 立即加入

想找人聊天解闷?想要学习干货?

微信公众号进击的Coder为你打造

进击的Coder

微信公众号 扫一扫关注