Mat*_*att 3 python websocket web-scraping
我正在尝试使用 Python 中的 sockjs 从网站上抓取 websocket 数据(帧),但我真的不知道该怎么做。
网址: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
Run Code Online (Sandbox Code Playgroud)
通常只有响应头我可以从帧中检索数据,对吗?
我试过这段代码,但我可以阅读内容:
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>]
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
检查 Chrome(或其他浏览器)中的流量,了解您应该如何协商以开始数据流。当谈判没问题时,您可以执行以下操作:
while True:
ws.recv()
Run Code Online (Sandbox Code Playgroud)
这是 Chrome 中向上/向下 WebSocket 流量的示例。
只需复制消息并在 ws.send() 中使用它。例子:
ws.send('''{"H":"publicmaphub","M":"getData","A":[],"I":1}''')
Run Code Online (Sandbox Code Playgroud)
该示例来自挪威/斯塔万格巴士的实时视图:https
: //www.kolumbus.no/ruter/kart/santidskart-internt/? c = 58.974238,5.691347,14 & lf = all & vt = bus,
ferry
(在该页面上您还需要首先通过 HTTPS 获取令牌,连接 WebSocket 并执行另一个 HTTPS 以启动流量。此后您可以执行 ws.recv() 和 ws.send() 组合以开始获取数据。)
| 归档时间: |
|
| 查看次数: |
5921 次 |
| 最近记录: |