【发布时间】:2020-10-06 02:42:54
【问题描述】:
我正在尝试从这个特定网页获取每日价格数据:
https://www.londonstockexchange.com/stock/CS1/amundi/company-page
这些数据显示在图表中。
我没有办法尝试获取这些数据。我假设这些数据是通过在浏览器控制台中建立和检索的 websocket 连接之一传输的。
我尝试模拟 websocket 连接并发送与前端应用程序相同的二进制文件。
from websocket import create_connection
s = create_connection("wss://82-99-29-151.infrontservices.com/wsrt/2/4")
hex_1 = "3e000000010..."
hex_2 = "13000000010..."
hex_3 = "1e000000010..."
ws.send(binascii.unhexlify(hex_1))
ws.send(binascii.unhexlify(hex_2))
ws.send(binascii.unhexlify(hex_3))
result = ws.recv()
然后我尝试使用以下所有可能的编码来解码此响应:
import binascii
from encodings.aliases import aliases
for v in [v for k, v in aliases.items()]:
try:
print(result.decode(v))
except:
print(f"ERROR {v}")
当然,我没有可以利用的可解释输出。我可以认为这里使用了密码。但我不知道如何进一步调查。
你对此有什么想法吗? :)
提前致谢!
阿尔科
编辑 1
我们可以看到一个给定日期的值为 16990 的数据点。这就是我要查找的图表的整个时间序列。
【问题讨论】:
-
嗨 AL Ko,欢迎来到 Stackoverflow。我查看了您要从中抓取的网站,该网站似乎也在通过 JSON(休息请求)将此信息传输到您的浏览器:api.londonstockexchange.com/api/gw/lse/instruments/alldata/CS1 如果您要查找的数据在此 JSON 中,您可以相对容易地向该 URL 发出获取请求。请注意,某些网站不喜欢或禁止数据抓取,格式错误的脚本很快就会对他们看起来像是 DOS 攻击,并阻止您。在将这些数据用于个人或公共用途之前,请先阅读它。
-
您是否通过 crome 开发工具对其进行了检查?它是否使用标头或任何其他身份验证或令牌?
-
感谢您的快速答复!我注意到了这些数据,但它不是我正在寻找的数据。我想让完整的时间序列出现在图表上。 CF编辑
-
嘿 Prashant,是的,我正在使用 Chrome 开发工具。确实,我可以在请求标头中找到一个 Sec-WebSocket-Key 和一个 Sec-WebSocket-Version。
标签: python web-scraping encoding websocket scrapy