logo
icon

集蜂云Docs

集蜂云
控制台
市场
设置
费用
采集器
运行与构建
输入与输出
构建
任务
发布
分享
开发
快速开始
创建采集器
输入
输出
采集队列
键值对
SDK
代码示例
数据-存储
数据-数据集
数据-键值对
数据-采集队列
代理
集成
webhook
企业微信
飞书
钉钉
邮箱
与其他采集器
收益
API

快速开始

开发流程

  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 , 应用的使用指南

示例代码请查看: beeize-scraper-example

项目目录结构参考

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:

建议使用国内源的 docker 镜像,可以加快构建速度。 如果找不到国内源的 docker 基础镜像,可以联系集蜂云管理员,帮忙上传到集蜂云的镜像仓库。

# 使用阿里的 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. 常见问题:收集用户反馈的问题以及解决办法