SSE推送数据抓取

提到数据抓取,对于老司机来讲一定觉得十分简单,请给我10行代码的空间,稳稳妥妥的把数据抓到本地(没错,这是犯法的),今天咱们看的是SSE推送接口型的数据抓取,你会发现这部分接口你直接使用requests.get这类方法不失败也不报错,因为过程中不会有终止状态,自然也只能傻等200的信号。

SSE

先来介绍SSE是个什么东西。
SSE ( Server-sent Events )是 WebSocket 的一种轻量代替方案,使用 HTTP 协议。
简单说,所谓SSE,就是浏览器向服务器发送一个HTTP请求,然后服务器不断单向地向浏览器推送“信息”(message)。例如邮箱服务的新邮件提醒,微博的新消息推送、管理后台的一些操作实时同步等,SSE 都是不错的选择。

SSE 的抓取

接下来就是重点了, 这类数据怎么抓取呢,普通的requests.get肯定是搞不定啦。 都让开,上demo

http://17.push2.eastmoney.com/api/qt/stock/details/sse?fields1=f1,f2,f3,f4&fields2=f51,f52,f53,f54,f55&mpi=2000&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&pos=-0&secid=1.600807&wbp2u=|0|0|0|web

上面这个链接大家可以访问来看看,你发现浏览器一直在刷新,然后一直推送给你数据,是一个股票实时交易数据的接口。下面直接上代码, python使用http.client当成一个长连接的请求抓取,代码逻辑十分简单,不断通过http_conn获取数据。

from http.client import HTTPConnection
url = 'http://97.push2.eastmoney.com/'# 119.3.12.115:80
http_conn = HTTPConnection('61.152.229.70', 80)
params = "/api/qt/stock/details/sse?fields1=f1,f2,f3,f4&fields2=f51,f52,f53,f54,f55&mpi=2000&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&pos=-0&secid=0.300059"
http_conn.request("GET", params)
with http_conn.getresponse() as response:
    while not response.closed:
        for line in response:
            print(line.decode("utf-8"))

很简单的一个小case, 看看对大家是否有帮助。 接下来你就可以把抓到的数据落盘或者分析啦。
据说SSE还是一个比较新的技术,很久没有在计算机工程的圈子混啦,哈哈,也不知道是不是一个新东西,不过咱们还是关注它能实现的功能上吧。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×