Python抓取Websocket数据
我试图用Python中的sockjs从一个网站上抓取websocket数据(框架),但我真的不知道怎么做 URL:ws://example.io/sockjs/wkzeza/websocket 在web调试器中,我可以看到以下响应标题:Python抓取Websocket数据,python,websocket,web-scraping,Python,Websocket,Web Scraping,我试图用Python中的sockjs从一个网站上抓取websocket数据(框架),但我真的不知道怎么做 URL:ws://example.io/sockjs/wkzeza/websocket 在web调试器中,我可以看到以下响应标题: Date: Sun, 27 Aug 2017 09:42:15 GMT Connection: upgrade Set-Cookie: oWG+Kel2MBo0v9FQK81NvuvBZcUwChaMvG2bsv1Ofs9Q8hHN+PlTn6PolO/8MgF
Date: Sun, 27 Aug 2017 09:42:15 GMT
Connection: upgrade
Set-Cookie: oWG+Kel2MBo0v9FQK81NvuvBZcUwChaMvG2bsv1Ofs9Q8hHN+PlTn6PolO/8MgFXh2ygqC7A8WsJ7cgZwvpwvsbSp0VCpRHqmYMhGGxr; Expires=Sun, 03 Sep 2017 09:42:15 GMT; Path=/
Upgrade: websocket
Sec-WebSocket-Accept: HA0gkvrFCF7qjVYIDvSBa5sJKkg=
Sec-WebSocket-Extensions: permessage-deflate
Server: nginx
CF-RAY: 394e146d34a12f65-MAD
通常只有响应头我才能从帧中检索数据,对吗
我已尝试使用此代码,但我可以阅读内容:
from websocket import create_connection
import json
headers = json.dumps({'Date': 'Sun, 27 Aug 2017 09:42:15 GMT',
'Connection': 'upgrade',
'Set-Cookie': 'oWG+Kel2MBo0v9FQK81NvuvBZcUwChaMvG2bsv1Ofs9Q8hHN+PlTn6PolO/8MgFXh2ygqC7A8WsJ7cgZwvpwvsbSp0VCpRHqmYMhGGxr; Expires=Sun, 03 Sep 2017 09:42:15 GMT; Path=/',
'Upgrade': 'websocket',
'Sec-WebSocket-Accept': 'HA0gkvrFCF7qjVYIDvSBa5sJKkg=',
'Sec-WebSocket-Extensions': 'permessage-deflate',
'Server': 'nginx',
'CF-RAY': '394e146d34a12f65-MAD'})
ws = create_connection('ws://example.io/sockjs/wkzeza/websocket', header=headers)
response = ws.recv_data_frame()
print(response)
>> [1, <websocket._abnf.ABNF at 0x7efe29aa0da0>]
从websocket导入创建\u连接
导入json
headers=json.dumps({'Date':'Sun,2017年8月27日09:42:15 GMT',
“连接”:“升级”,
“设置Cookie”:“oWG+KEL2MBO0V9FQK81NVUVBZCUWCHAMVG2BSV1OFS9Q8HN+PlTn6PolO/8MgFXh2ygqC7A8WsJ7cgZwvpwvsbSp0VCpRHqmYMhGGxr;Expires=Sun,2017年9月3日09:42:15 GMT;Path=/”,
“升级”:“websocket”,
“Sec WebSocket接受”:“HA0gkvrFCF7qjVYIDvSBa5sJKkg=”,
“Sec WebSocket Extensions”:“permessage deflate”,
“服务器”:“nginx”,
‘CF-RAY’:‘394e146d34a12f65 MAD’)
ws=create_连接('ws://example.io/sockjs/wkzeza/websocket',header=headers)
response=ws.recv_data_frame()
打印(答复)
>> [1, ]
感谢您的帮助。检查Chrome(或其他浏览器)中的流量,了解您应该如何协商开始数据流。 当协商顺利时,您可以执行以下操作:
while True:
ws.recv()
下面是Chrome中向上/向下WebSocket流量的示例
只需复制消息并在ws.send()中使用它。
例如:
该示例来自挪威/斯塔万格公交车的实时视图:
(在该页面上,您还需要首先通过HTTPS获取令牌,连接WebSocket并执行另一个HTTPS来启动流量。之后,您可以执行ws.recv()和ws.send()组合来开始获取数据。)我终于找到了。原因是。。。我对websocket缺乏了解,而且我发现了一个非常好的回购协议,并给出了一个解释()。几乎没有改动,它对我的情况非常有效。它也解决了我的问题。谢谢
ws.send('''{"H":"publicmaphub","M":"getData","A":[],"I":1}''')