数据抓取中如何处理第三方的protobuf数据流

前言

protobuf是什么

具体定义可以百度,简单来说就是谷歌发明的一直数据传输格式。类似于json/xml,但是更小更高效

这里核心要说的就是protobuf的使用方法

参考

https://www.jianshu.com/p/a24c88c0526a

使用方法

正常的开发使用步骤

1.电脑下载protobuf的编译环境

https://github.com/protocolbuffers/protobuf/releases/tag/v3.7.1

下载后加入环境变量

2.定义数据格式文件 .proto 大概长下面这样


syntax = "proto3"; // proto3 必须加此注解

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
  enum Corpus {
    UNIVERSAL = 0;
    WEB = 1;
    IMAGES = 2;
    LOCAL = 3;
    NEWS = 4;
    PRODUCTS = 5;
    VIDEO = 6;
  }
  Corpus corpus = 4;
}

具体的格式 写法这里不详谈 去官网看下手册就是了

https://developers.google.com/protocol-buffers/docs/tutorials

3.使用命令生成对应语言的发送和解析文件,这里以python为例

protoc -proto_path=./ --python_out=./ ./JetProtos.proto

4.使用该文件发送和解析数据

爬虫处理protobuf数据

1.解析成 bytes 或者 inputStream

python 中 reques 的 content 就是 bytes

2.推断数据包格式,反推出发送的数据 .proto的文件格式

这一部尤为核心,具体的方法有好多:

1.反编译查看原程序的解析逻辑和接收类

2.抓包分析信息流,可能是乱码但是没关系 可以看个大概

3.乱测 从最外层开始 一种一种解析方式测试过去 可以无序的解析不影响解析结果

3.生成对应的解析文件

4.使用解析文件接收数据流 大功告成