数据抓取中如何处理第三方的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.乱测 从最外层开始 一种一种解析方式测试过去 可以无序的解析不影响解析结果