Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python抓取Websocket数据_Python_Websocket_Web Scraping - Fatal编程技术网

Python抓取Websocket数据

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

我试图用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/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}''')