美文网首页
Websocket爬虫(初级)

Websocket爬虫(初级)

作者: 隐墨留白 | 来源:发表于2019-06-26 18:05 被阅读0次

有些网站为了追求数据的实时更新,很多时候会采用 websocket 的方式,例如股票交易数据、数据货币交易数据等。

那什么是websocket?

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

爬取目标
  • 目标网址:https://eosflare.io/whales

  • 打开网址后F12-->再次刷新页面-->点击WS,就会出现一条目录。

  • 点击目录右边的Headers就能找到websocket的请求url。

  • 点击Message就能看到真正的数据交互了,绿箭头是客户端传给服务器的数据,红箭头则是服务器传给客户端的数据。

那到底这些数据如何才能爬取到呢?

http请求可以用requests库,但是websocket就需要用到websocket库。

  • 第一步 安装websocket

  • 第二步 看交互数据
    因为websocket只发生一次握手,所以需要确认网络请求和握手数据。这个可以根据开发者工具搞定(但是有的网站会将数据加密)

  • 第三步 写代码

    import websocket
    
    wbsocket_url = 'wss://api-v1.eosflare.io/socket.io/?EIO=3&transport=websocket'
    #创建websocket请求
    ws = websocket.create_connection(url=wbsocket_url,timeout=10)
    #接收 服务器发过来的两条信息
    for i in range(2):
        content = ws.recv()
        print(content)
    #注意:握手数据应注意格式与准确性,别以为赋值粘贴就完事了,下面的数据就有一个坑
    data = '42["message","{\\"_url\\":\\"/chain/get_user_whales\\",\\"_method\\":\\"POST\\",\\"_headers\\":{\\"content-type\\":\\"application/json\\"},\\"page\\":' + str(page) + ',\\"limit\\":50,\\"sortBy\\":\\"total\\",\\"ascending\\":false,\\"lang\\":\\"zh-CN\\"}"]' 
    #客户端发送握手数据
    ws.send(data)
    #客户端接收服务器返回的数据
    content = ws.recv()
    #关闭请求
    ws.close()
    

如果你够仔细的话就会发现一个规律,下一页数据的握手请求数据就只是page后面的数字改变了一下,所以再次修改代码,获取前5页的数据。

import websocket
import json
from time import sleep
wbsocket_url = 'wss://api-v1.eosflare.io/socket.io/?EIO=3&transport=websocket'
ws = websocket.create_connection(url=wbsocket_url,timeout=10)
for i in range(2):
    content = ws.recv()
    print(content)
# 爬取前5页数据
for page in range(5):
    sleep(3)
    data = '42["message","{\\"_url\\":\\"/chain/get_user_whales\\",\\"_method\\":\\"POST\\",\\"_headers\\":{\\"content-type\\":\\"application/json\\"},\\"page\\":' + str(page) + ',\\"limit\\":50,\\"sortBy\\":\\"total\\",\\"ascending\\":false,\\"lang\\":\\"zh-CN\\"}"]'
    ws.send(data)
    content = ws.recv()
    str_dic = list(eval(content[2:]))[1]
    data = json.loads(str_dic)['holders']
    for i in data:
        print(i)
ws.close()

相关文章

  • Websocket爬虫(初级)

    有些网站为了追求数据的实时更新,很多时候会采用 websocket 的方式,例如股票交易数据、数据货币交易数据等。...

  • websocket

    首先本篇文章的主要目的是了解websocket协议,并将其使用在爬虫领域 什么是websocket websock...

  • websocket与爬虫

    背景 写爬虫的目的应该就是为了拿到数据,或者说模拟某种操作如果他使用的是http(s) 协议来传输数据的,那么我们...

  • python 关于正则表达式的运用-猫眼电影的爬取

    关于python爬虫的实用技巧---【初级爬虫应用】 【爬取网址】:https://maoyan.com/boar...

  • 优化爬虫初级篇

    优化爬虫初级篇 前记:之所以说是初级篇,是我现在用的爬虫最多也就是十万级数据,数据量还是不大,所以以下内容还是我实...

  • 01.Python基础

    Python爬虫快速实战 目标: 通过四天的学习,具备爬虫(Python)初级工程师的能力,胜任接口(API)自动...

  • 爬虫入门之爬取全唐诗并写入数据库

    学习爬虫有一段时间了,今天想在此写一篇基于新手对爬虫入门的理解和初级爬虫的构建的文章。说白了,这篇文章,是写给比我...

  • 2018-04-19 爬虫猫眼电影

    1、初级的爬虫: 网络基础:cookie,session,https,headers常用的字段,代理使用等等 py...

  • 网络爬虫初级攻略

    网络爬虫初级攻略 在这里将使用一个非常简单的爬取某网站照片的爬虫作为实例,来归纳一下使用urllib2库进行网络爬...

  • python初级原生爬虫

    总共分一下几个步骤 明确目的 找到数据对应的网页 分析网页的结构找到数据所在的标签位置 模拟HTTP请求,向服务器...

网友评论

      本文标题:Websocket爬虫(初级)

      本文链接:https://www.haomeiwen.com/subject/jzchcctx.html