zoukankan      html  css  js  c++  java
  • 抓取知乎每日吐槽

    【本文首发于:http://www.karottc.com/blog/2015/07/26/zhihu-sarcasm/

    —— by karottc

    知乎日报 里面有一节,叫做⎾如何正确的吐槽⏌,里面有很多很有意思而有短小的回答,基本上我我每天都会看一眼。 所以我就写了脚本把他们全部抓了下来,放到自己的服务器上,同时每天还在定时去抓取当天新出来的数据,然后用 swift 写了一个 app 来从自己的服务器获取数据来看。

    下面记录一下做这件事的过程。

    抓取数据

    要抓取知乎的吐槽数据,第一步就是要知道它对应的 URL ,这个获取方法也很简单,直接抓个包就能知道了,具体的形式大概如下这样:

    • http://news-at.zhihu.com/api/4/section/2/before/xxxxxx , 这个是获取整个吐槽的标题列表的url;
    • http://news-at.zhihu.com/api/4/story/xxxxx , 这个是获取具体某一天的内容的url。

    创建数据库

    这个数据量并不大,我建了两张表,一张存索引,一张存每天具体的内容。如下图:mysql表

    搭建服务器

    有了数据,下一步就是提供 CGI 接口给外部调用获取数据,然后显示。

    然后,我用 nginx + django 搭了一个服务器,提供了三个接口,都是返回 JSON 格式的数据,三个接口具体如下:

    • http://104.128.85.9:8001/api/gethomelist:获取首屏的数据列表;
    • http://104.128.85.9:8001/api/getnextlist?timestamp=1434666598:下拉刷新的时候获取新增数据;
    • http://104.128.85.9:8001/api/getstorydetail?id=4827840:获取某一天具体的内容。

    可以看得出来,我这三个接口都是为了给 app 端调用而设计提供的,所以下一步就是完成一个 app 把这些内容显示出来。

    app 端显示

    app 端的工作就是:

    • 通过网络请求获取数据;
    • 解析 JSON 数据然后根据一定的排版显示。

    当然,我也是只实现了一个极其简陋的效果,直接放图好了:app图
    app图

    上面两个图是历史列表和具体某一天内容的截图,下面再放一个应用图标的图:app图
    上面有个图标乱入了,这个是我学习 swift 的做的一个练习,具体可以看这篇:点我.

    整个过程大概就是这样。

    附件资料

    上面提到的服务和抓去知乎数据的代码在这里:点我

    app 源码在这里:点我

    2015.07.26

  • 相关阅读:
    CentOS 7 设置iptables防火墙开放proftpd端口
    Android手机修改Hosts的方法
    Wireshark提示没有一个可以抓包的接口
    while read line无法循环read文件
    Nagios新添加的hosts和services有时显示,有时不显示问题解决
    Nginx配置http强制跳转到https
    xargs rm -rf 与 -exec rm
    解决vim不能使用方向键和退格键问题
    NRPE: Unable to read output 问题处理总结
    MySQL 5.6 解决InnoDB: Error: Table "mysql"."innodb_table_stats" not found.问题
  • 原文地址:https://www.cnblogs.com/karottc/p/zhihu-sarcasm.html
Copyright © 2011-2022 走看看