集蜂云 Doc Help

快速开始

开发流程

  1. 创建项目

  2. 安装依赖, pip install beeize-sdk-python

  3. 编写 main.py ,应用代码

  4. 编写 requirements.txt ,依赖包

  5. 编写 Dockerfile ,镜像打包

  6. 编写 input_schema.json ,应用发布后的输入项

  7. 编写 output_schema.json ,运行结果的展示概览

  8. 编写 README.md , 应用的使用指南

项目目录结构参考

your_project/ requirements.txt input_schema.json Dockerfile output_schema.json README.md main.py

sdk 输出目录结构参考

storage/ datasets/ default/ 000000001.json 000000002.json 000000003.json 000000004.json __metadata__.json kv_stores/ default/ demo1.mp4 demo2.mp4 demo3.mp4 demo4.mp4 __metadata__.json request_queues/ default/ 8m3Ssk32vNgBp4p.json 9NQYbiNlWlaJYci.json 09nTuJT7y87FGXs.json EmPwJk4NaJQPzpS.json __metadata__.json

main文件示例

import json import requests from beeize.scraper import Scraper from loguru import logger headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (' 'KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0', } def fetch(url, retry_count=0): try: response = requests.get( url=url, headers=headers ) return response.json() except (Exception,): if retry_count < 3: return fetch(url, retry_count + 1) def main(): scraper = Scraper() // 注意:scraper 要全局唯一,scraper是线程安全的 queue = scraper.request_queue kv_store = scraper.key_value_store visit_user_token = 'MS4wLjABAAAAiAce5qhH31TeuB3UdpFMV8u-uwy2LnoiqI10uZHqAt8' start_url = f'https://www.toutiao.com/api/pc/feed/?category=profile_all&utm_source=toutiao&visit_user_token={visit_user_token}&max_behot_time=0&_signature=' # 添加初始请求任务到队列 queue.add_request({'url': start_url, 'type': 'profile'}) while queue.is_finished(): # 消费队列中的请求任务 request = queue.fetch_next_request() if not request: break logger.info(request) url = request['url'] # 下载请求 resp = fetch(url) if not resp: # 对失败请求进行标记 queue.reclaim_request(request) continue # 对成功请求进行标记 queue.mark_request_as_handled(request) # 解析列表页 if request['type'] == 'profile': for item in resp.get('data'): item_id = item.get('item_id') item['type'] = 'basic' # 存储到 datasets scraper.push_data(item) logger.info(item) # 添加详情页请求任务到队列 queue.add_request({ 'url': f'https://m.toutiao.com/i{item_id}/info/', 'type': 'detail', 'item_id': item_id, }) # 解析详情页 if request['type'] == 'detail': item = resp.get('data') item['url'] = url item['type'] = 'complete' # 存储到 datasets scraper.push_data(item) item_id = request.get('item_id') # 存储文件到 kv_store kv_store.set_value(item_id, json.dumps(item, ensure_ascii=False, indent=4)) logger.info(item) # 日志 if __name__ == '__main__': main()

Dockerfile示例

Python 项目可参考如下 Dockerfile:

# 使用阿里的 Python 镜像作为基础镜像(国内把 dockerhub 禁掉了,拉不下来镜像) # 如果代码需要 node 环境运行 js,可以把基础镜像替换成 registry.cn-shanghai.aliyuncs.com/beeize-public/python-nodejs:python3.11-nodejs22 FROM alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/python:3.11.1 # 设置工作目录 WORKDIR /app # 复制项目文件到容器中 COPY . /app # 安装依赖 RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 设置环境变量,可选项,TZ 是特定的一个环境变量,用来设置容器时间时区,不设置的话默认是 UTC 时区,打印日志时间是 UTC 时间 ENV TZ=Asia/Shanghai # 设置容器启动时执行的命令 CMD python main.py

input_schema 示例

input_schema.json 定义了采集器的输入,平台会把 input_schema.json 界面化显示,方便用户配置参数。 平台将用户输入参数转换为环境变量,采集器在运行的时候,通过环境变量获得用户输入的参数。

使用流程如下:

输入流程

参数详细定义,请参考 输入

output_schema示例

output_schema 用来帮助用户更好的理解数据含义,平台根据 output_schema.json 的定义来可视化展示数据。 目前,平台支持的数据类型(type字段)包括 string、number、array、image、link、object、bool 7 种类型。

详细请参考 输出

{ "component": "table", "columns": { "title": { "title": "标题", "type": "string" }, "author": { "title": "作者", "type": "string" }, "publish_time": { "title": "发布时间", "type": "string" }, "content": { "title": "正文", "type": "string" }, "images": { "title": "图片", "type": "array" }, "url": { "title": "内容页链接", "type": "string" }, "list_page": { "title": "列表页链接", "type": "string" } } }

README.md 示例

README.md 是用来介绍你的采集器,让用户更加理解采集器,从而选择使用你的采集器。

README 可以按照下面的提纲进行编写:

  1. 首先整体介绍下采集器采集的站点、采集内容、采集器的特点;

  2. 使用方法:逐个介绍输入中的选项,以及设置的选项可能对用户带来的影响。如果比较复杂,甚至可以录一个视频;

  3. 样例数据:介绍下采集的数据,可以提供样例数据截图(截图可以上传到免费的图床);

  4. 常见问题:收集用户反馈的问题以及解决办法

Last modified: 16 十月 2024