RPC通用爬虫

RPC通用爬虫

一、项目案例

在这里插入图片描述

  • 测试网址: aHR0cDovL3d3dy5mYW5nZGkuY29tLmNuL3NlcnZpY2UvYnVsbGV0aW5fbGlzdC5odG1sP3R5cGVhPWI2N2MzYjhhZGJkY2U3NGQ=

二、Rpc原理解析

在这里插入图片描述

图解关系:

​ 主要包括,爬虫程序、Web服务器、WebScoket服务器、浏览器

核心流程:

​ 爬虫程序调用服务器,可传入参数给服务器,服务器接收到参数后创建一个WS连接,连接到WebSocket服务器;WebSocket服务器其实什么都没有做,就是将消息传递浏览器。因为我们提前替换一些代码,相当于进行hook(找到参数加密解密逻辑,然后利用window定义全局变量),后续传递消息给浏览器,让它帮助我们完成加密解密的工作。将加密参数或是解密参数结果直接返回,发送给WebSocket服务器,最后经过Web服务器返回给我们的爬虫,继续请求服务器获取数据。

启动顺序:

​ 1.WebSocket服务器;

​ 2.断点浏览器,注入JS代码 建立与WS的连接;

​ 3.Web服务器开启等待请求,建立WS连接;

​ 4.Spider调用服务器接口;

三、Rpc代码分享

  • WebSocket服务器

    '''
    模块依赖
    pip install websockets
    pip install sanic
    '''
    import re
    import asyncio
    import websockets
    
    # TODO: 消息转发 握手原则
    BROWSER_KEYWORD = "regist"
    PYTHON_SERVER_KEYWORD = "sanic2"
    # ws链接内存存储
    browser_info: dict = {
         }
    sanic_info: dict = {
         }
    
    async def dispatch_action(ws, path):
        """
        请求分发,存储不同的连接
        :param ws: 服务器与连接对象的连接
        :param path: 请求路径
        :return:
        """
        # action_name 标识 连接对象身份 ...
        re_result = re.compile("/(?P<action_name>.*?)\?name=(?P<proj_name>.*)").search(path)
        action_name: str = re_result.group("action_name")
        proj_name: str = re_result.group("proj_name")
    
        # 连接保存 对应存储连接对象 {}
        if action_name == PYTHON_SERVER_KEYWORD:  # Python
            sanic_info[action_name] 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值