python如何抓取类型为EventStream的数据
python如何抓取类型为EventStream类型的数据,如下图
使用stream参数和iter_content方法
s=""
resp=requests.get(url,stream=True)
print(resp.headers)
for chunk in resp.iter_content(chunk_size=1024):
text=chunk.decode('utf-8')
s+=text.strip('\n')
if text.endswith('\n\n'):##第一条发送读取完毕,关闭链接退出
resp.close()
break
该回答引用ChatGPT
如果你想抓取类型为 EventStream 的数据,那么你需要使用长连接(long polling)的方式。你可以使用 requests 库,但需要注意以下几点:
1、设置请求头:需要设置 Accept 和 Connection 两个请求头。
2、处理响应:因为 EventStream 类型数据是以块的形式返回的,所以你需要循环读取响应,直到读取到空响应为止。
import requests
url = "你的 EventStream 数据请求 URL"
headers = {
"Accept": "text/event-stream",
"Connection": "keep-alive"
}
r = requests.get(url, headers=headers, stream=True)
for chunk in r.iter_content(chunk_size=1):
if chunk:
print(chunk)
抓取EventStream类型的数据需要使用浏览器的JavaScript API,具体来说可以使用以下步骤:
1.在网页中创建一个EventSource对象,该对象与服务器进行连接并监听服务器的消息。
var source = new EventSource("/sse");
在EventSource对象上监听'serverdata'事件。
source.addEventListener("serverdata", function(event) {
// 处理接收到的数据
var data = event.data;
// ...
}, false);
当不再需要时,关闭连接。
source.close();
如果想在python中抓取这类数据,可以使用第三方库,例如requests、beautifulsoup等来进行爬取。操作方法如下:
import requests
# 发送请求
response = requests.get("<URL>")
# 处理接收到的数据
data = response.text
# ...
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!