抓取使用 firebase 数据库的网页

Del*_*lta 3 javascript python web firebase firebase-realtime-database

免责声明:我只是边做边学,我没有恶意

所以,我想获取这个网站上列出的应用程序列表:http : //roaringapps.com/apps

我过去做过类似的事情,但网站更简单;这次我在获取此网页背后的数据时遇到了问题。

页面之间的滚动速度非常快,因此,为了了解网页的工作原理,我启动了数据包嗅探器并分析了流量。我注意到,在初始加载后,即使我在浏览器中滚动了 2500 条记录,服务器和我的客户端之间也不会交换流量。这怎么可能?

无论如何。我的理解是该网站正在从某种流中加载数据,并通过 Javascript 呈现它。我对么?

因此,我启动了 Chromium devtools 并查看了“网络”选项卡,发现向以下地址发出了 WebSocket 请求:wss://s-usc1c-nss-123.firebaseio.com

铬开发工具

此时,在谷歌搜索之后,我尝试使用我在 devtools 窗口上看到的“v=5&ns=roaringapps”查询来查询完全相同的服务器:

from websocket import create_connection
ws = create_connection('wss://s-usc1c-nss-123.firebaseio.com')
ws.send('v=5&ns=roaringapps')
print json.loads(ws.recv())
Run Code Online (Sandbox Code Playgroud)

并得到了这个回复:

{u't': u'c', u'd': {u't': u'h', u'd': {u'h': u's-usc1c-nss-123.firebaseio.com', u's': u'JUL5t1nC2SXfGaIjwecB6G13j1OsmMVv', u'ts': 1476799051047L, u'v': u'5'}}}
Run Code Online (Sandbox Code Playgroud)

我期待看到一个 json 响应,其中包含有关应用程序等的原始数据。我做错了什么?

非常感谢!

更新

实际上,我刚刚发现该网站正在使用 json 加载其数据。我没有在迭代请求中看到它可能是因为缓存 - 但是在铬中禁用它可以解决问题。

Fra*_*len 5

Firebase 数据库允许您读/写 JSON 数据。但它的 SDK 并不是简单地传输原始 JSON 数据,而是在此基础上做了许多技巧以确保高效和流畅的体验。宽

你得到的是 Firebase 的有线协议。该协议没有公开记录,并且(如果您不熟悉它)试图解开它会给您带来不愉快的时间。

要在某个位置检索实际的 JSON,最简单的方法是使用Firebase 的 REST API。你可以通过简单地附加.json到 URL 并针对它触发 HTTP GET 请求来获得它。

因此,如果正在从以下位置加载初始数据:

https://mynamespace.firebaseio.com/path/to/data
Run Code Online (Sandbox Code Playgroud)

您可以通过针对以下对象触发 HTTP GET 来获取原始 JSON:

https://mynamespace.firebaseio.com/path/to/data.json
Run Code Online (Sandbox Code Playgroud)