【问题标题】:Scrape socket.io data from website using python使用 python 从网站上抓取 socket.io 数据
【发布时间】:2018-01-27 22:35:07
【问题描述】:

我正在尝试从该网站“http://btc-exchange.com/”获取最新的出价和要价 我可以看到这个socket.io正在提供价格

wss://pusher.mistertango.com/socket.io/?EIO=3&transport=websocket&sid=XXX

会话 ID 正在从此调用中生成

https://pusher.mistertango.com/socket.io/?EIO=3&transport=polling&t=1517079662330-10

这是我目前使用的代码

import requests
from websocket import create_connection
import json

SID_url = "https://pusher.mistertango.com/socket.io/?EIO=3&transport=polling"
SID_req = requests.get(SID_url, headers={'User-Agent': 'Mozilla/5.0'}).text
SID = SID_req[SID_req.index("sid")+6:SID_req.index(",")-1]
print(SID_req)
print(SID)

ws = create_connection("wss://pusher.mistertango.com/socket.io/?EIO=3&transport=websocket&sid="+SID)
ws.send('2probe')
print(ws.recv())
ws.send('5')
print(ws.recv())
ws.send('42["subscribe",{"chan":"market-e559906eda4362f58bcaab40a4bfb5b4"}]')
while True:
    result = ws.recv()
    print(result)
ws.close()

这是代码的输出

    ÿ0{"sid":"mURV8OnaNqax_AmvAAF2","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":60000}
mURV8OnaNqax_AmvAAF2
3probe
40

我发送的消息是基于我在 chrome-dev 工具中看到的消息。 Websocket msgs

我的连接在“40”之后停止接收任何消息。我做错了什么?

【问题讨论】:

  • 您最终找到解决问题的方法了吗?

标签: python websocket socket.io scrape


【解决方案1】:

有你想要的代码。测试和工作

#!/usr/bin/env python
from socketIO_client import SocketIO

def on_connect():
    print('connect')

def on_disconnect():
    print('disconnect')

def on_reconnect():
    print('reconnect')

def on_aaa_response(*args):
    print('on_aaa_response', args)

def on_bbb_response(*args):
    print('on_bbb_response', args)

with SocketIO('https://pusher.mistertango.com') as socketIO:
    socketIO.on('connect', on_connect)
    socketIO.on('disconnect', on_disconnect)
    socketIO.on('reconnect', on_reconnect)
    socketIO.on('market-orderbook', on_aaa_response)
    socketIO.emit('subscribe', {'chan': 'market-orderbook'}, on_bbb_response)
    socketIO.wait_for_callbacks(seconds=10)

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 改变了我的答案
【解决方案2】:

您可以使用 asyncio 和 websocket 来解决您的问题。 可以使用以下命令安装websocket

pip install websocket

之后使用下面的代码sn-p作为例子与web服务器进行通信:

import asyncio
import websockets

async def responseFunc(uri):
    async with websockets.connect(uri) as websocket:
        await websocket.send("Hello world!")

url = "wss://pusher.mistertango.com/socket.io/?EIO=3&transport=websocket&sid=XXX"

asyncio.get_event_loop().run_until_complete(
    responseFunc(url))

参考:https://pypi.python.org/pypi/websockets

【讨论】:

  • 感谢您的回答,但我仍然没有收到任何回复。我能够建立连接但没有收到响应。
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
相关资源
最近更新 更多