oracle group by 取最后的一条_太好玩了,爬虫、部署API、加小程序,一条龙玩转知乎热榜!...

本文分享了一位开发者从爬取知乎热榜数据,存储到数据库,编写 API,到接入小程序的全过程。使用 Flask 搭建 API 服务,利用 flask_sqlalchemy 和 flask_apscheduler 插件进行数据存储和定时任务。在小程序端,使用 uni-app 框架进行开发,并借助 uCharts 插件实现图表展示。
摘要由CSDN通过智能技术生成

ef210b48-8427-eb11-8da9-e4434bdf6706.png

来源:萝卜大杂烩

ID:luobodazahui

一直想做一个从爬虫到数据处理,到API部署,再到小程序展示的一条龙项目,最近抽了些时间,实现了一个关于知乎热榜的,今天就来分享一下!

由于代码还没有完全整理好,今天只给出一个大致的思路和部分代码,最终的详细代码可以关注后续的文章!

数据爬取

首先我们看下需要爬取的知乎热榜

https://www. zhihu.com/billboard

这个热榜可以返回50条热榜数据,而这些数据都是通过页面的一个 JavaScript 返回的

f5210b48-8427-eb11-8da9-e4434bdf6706.png

于是我们就可以通过解析这段 JS 代码来获取对应数据

url = 'https://www.zhihu.com/billboard'
headers = {"User-Agent": "", "Cookie": ""}


def get_hot_zhihu():
    res = requests.get(url, headers=headers)
    content = BeautifulSoup(res.text, "html.parser")
    hot_data = content.find('script', id='js-initialData').string
    hot_json = json.loads(hot_data)
    hot_list = hot_json['initialState']['topstory']['hotList']
    return hot_list

然后我们再点击一个热榜,查看下具体的热榜页面,我们一直向下下拉页面,并打开浏览器的调试板,就可以看到如下的一个请求

fa210b48-8427-eb11-8da9-e4434bdf6706.png

该接口返回了一个包含热榜回答信息的 json 文件,可以通过解析该文件来获取对应的回答

def get_answer_zhihu(id):
    url = 'https://www.zhihu.com/api/v4/questions/%s/answers?include=' % id
    headers = {"User-Agent": "", "Cookie": ""}
    res = requests.get(url + Config.ZHIHU_QUERY, headers=headers)
    data_json = res.json()
    answer_info = []
    for i in data_json['data']:
        if 'paid_info' in i:
            continue
        answer_info.append({'author': i['author']['name'], 'voteup_count': i['voteup_count'],
                            'comment_count': i['comment_count'], 'content': i['content'],
                            'reward_info': i['reward_info']['reward_member_count']})
    return answer_info

数据存储

获取到数据之后,我们需要存储到数据库中,以便于后续使用。因为后面准备使用 Flask 来搭建 API 服务,所以这里存储数据的过程也基于 Flask 来做,用插件 flask_sqlalchemy。

定义数据结构

我们定义三张表,分别存储知乎热榜的详细列表信息,热榜的热度信息和热榜对应的回答信息

class ZhihuDetails(db.Model):
    __tablename__ = 'ZhihuDetail
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值