爬知乎问题,淘宝上有哪些「价格不高,格调很高」的东西

时间:2017-06-22 作者:包包 69人已阅读 学习笔记

最近在知乎上面看到了一篇文章淘宝上有哪些「价格不高,格调很高」的东西?,对于平时喜欢买买买的人来说,这些经过用户精心挑选,小众又奇特的东西非常具有吸引力。



知乎瀑布流的加载方式,再加上自动加载图片,自动收缩伸展列表块的功能。在国内知名的网站中,算是做得非常出色的,阅读的时候觉得用户体验非常好。



这篇文章里面有737个回答,里面的精华非常多,要读完这些文章至少得花上好几个小时的时间,正常情况下我又不可能花一整天的时间来读,而是一般选择在碎片时间看一下。


用瀑布流加载的网站有个弊端,如果从头到尾的读的话,几乎感觉不到分页,非常的顺畅。而如果间断性阅读的话,每次都要从第一页开始翻,对于动不动就长篇大论的知乎回答来说,拉拉拉挺让人感觉崩溃的,而且里面大篇幅的图片加载的时候那个速度也是问题。要是遇到网络卡,有时候浏览器都会死掉,此番艰难的拉拉拉又得重来一次。而使用知乎的手机App,这方面的体验也没有很好。


所以我就想还是先把这篇文章里面的图文都保存下来,方便我随时想看就看,想看哪里就看哪里。



分析链接,识别抓取文本的连接串

通过浏览器的开发者模式,可以观察用户获取图文详情的连接



我看了一下,这个名字为**answer**的连接就是抓取图文的连接,里面包含有页码和页数等的信息,而且返回的格式为json。但是单独通过浏览器标签页打开的时候却报了401授权错误,说明在浏览器头包含了一些身份的信息。于是,我又再次查看这个连接的请求头和参数。包含的信息如下图:



在图中可以看到除了常规的类型,cookie等,还有一个**authorization**,这个信息应该是基于某种机制生成,用于身份认证的,所以在写代码伪造浏览器的request头的时候,这个信息也要附带上去。


抓取数据,分抓取文本数据和分析文字抓取图片两步


写完了代码之后,便开始运行程序把文本数据抓下来,这里我采用的是翻一页,保存一个文本文件的方式。为了不被反爬虫机制轻易的发现,我决定温柔一点,抓取每一页之间设定3~8秒随机时间的延时。虽然只是抓取一点内容,就算被发现了也没有人理我,而且也不用登录,封我IP大不了就重启一下moden,但是这个延时再慢也比手动拉要快得多,而且有些习惯还是一开始就养成比较好。



就这样,我默默的坐在电脑前面,看着这个黑色的窗口刷刷刷的两分钟内把37页的数据都给拉了下来。


数据都抓下来之后,我打开了一个比较小的文档,方便看json的组成结构。


每一个数据块都包含了回答者、问题和回答等的信息,而我想要的内容主要在这块。



这个content的关键字对应的值就是回答的详细内容,里面包含了图文详情。


所以接下来要做的事就是对content中的内容解析,把图片下载下来。于是通过一系列的正则匹配,把每一个图片的地址都读出来之后,进行了几个操作:


(1)图片重新命名,按照**回答的id+图片在文章中的顺序** 作为图片的名字。


(2)将所有图片下载下来,并且用(1)的命名规则保存


(3)将文本中原图片的位置替换成 【图片本地名字】,全部替换后把文本再剔除html标签再保存下来。将其命名为 **回答的id+0.txt**



写完了代码之后又开启了黑色的命令窗口来刷刷刷,我还是设定了抓取每个图片间0~2秒的随机延时,看着窗口的文字不停的滚动,不断的有图片出现在本地文件夹中,这次我就没有默默的坐在电脑前了,而是走开了,该干嘛,干嘛去。因为这个图片的数量有多少,我也不知道,只知道应该是不少。



几个小时之后回来,看到除了解析之后的737个文本文件之外,还有七千多张图片。果然是信息量挺大的。


阅读图文


这些图文我可以这样的阅读,打开windows的快捷浏览方式,点击每个txt文件,快速看一下里面的文字有没有比较有趣的东西,然后再看文字下方的图片名,找到文字所指的图片名看一下是什么样子的。



还有一种更快的阅读方式,打开一张图片,通过 键盘的向上和向下按钮浏览图片,看到感兴趣的东西,可以找离图片最近的前一个文本文件,再找到文本,去看文本里面是怎么描述这个东西的。用这种方式,半个小时内就可以读完在网站上面看一整天的文章。



当然论直观,肯定没有在网站上直接阅读体验好。但是这种方式,胜在机器帮助人节省了大部分的下载网络消息的时间,直接就把最直观和最需要的信息展示在面前。


另外,我还抓了另一一篇文章,也觉得非常有意思,[一个人可以 DIY 出什么有意思的东西?](https://www.zhihu.com/question/36255080)