跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.olostep.com/llms.txt

Use this file to discover all available pages before exploring further.

通过 Olostep /v1/scrapes 端点,你可以实时从任何URL中提取适合LLM的Markdown、HTML、文本、截图或结构化JSON。
  • 输出干净的markdown、结构化数据、截图或html
  • 通过解析器LLM提取提取JSON
  • 处理动态内容:js渲染的网站、通过动作的登录流程、PDFs
有关API详细信息,请参阅抓取端点API参考

抓取一个URL

使用 /v1/scrapes 端点抓取单个URL并选择输出格式。

安装

pip install olostep

使用方法

你可以使用该端点抓取单个URL并选择输出格式。必需的参数是 url_to_scrapeformats 一些其他常见参数是 wait_before_scraping(以毫秒为单位)、remove_css_selectors(默认、无或选择器数组)和 country
from olostep import Olostep

client = Olostep(api_key="YOUR_REAL_KEY")

result = client.scrapes.create(
    url_to_scrape="https://en.wikipedia.org/wiki/Alexander_the_Great",
    formats=["markdown", "html"],
)

print(result.markdown_content)
print(result.html_content)

响应

API返回一个 scrape 对象作为响应。 scrape 有几个属性,如 idresult result 对象有以下字段(根据 formats 参数,有些可能为null):
  • html_content: 页面HTML内容。传递 formats: ["html"] 来获取。
  • markdown_content: 页面MD内容。传递 formats: ["markdown"] 来获取。
  • text_content: 页面文本内容。传递 formats: ["text"] 来获取。
  • json_content: 页面JSON内容。传递 formats: ["json"] 并提供 parserllm_extract 参数来获取。
  • screenshot_hosted_url: 截图的托管URL。
  • html_hosted_url: HTML内容的托管URL。
  • markdown_hosted_url: Markdown内容的托管URL。
  • json_hosted_url: JSON内容的托管URL。
  • text_hosted_url: 文本内容的托管URL。
  • links_on_page: 页面上的链接。
  • page_metadata: 页面的元数据。
{
  "id": "scrape_6h89o8u1kt",
  "object": "scrape",
  "created": 1745673871,
  "metadata": {},
  "retrieve_id": "6h89o8u1kt",
  "url_to_scrape": "https://en.wikipedia.org/wiki/Alexander_the_Great",
  "result": {
    "html_content": "<html...",
    "markdown_content": "## Alexander the Great...",
    "text_content": null,
    "json_content": null,
    "screenshot_hosted_url": null,
    "html_hosted_url": "https://olostep-storage.s3.us-east-1.amazonaws.com/text_6h89o8u1kt.txt",
    "markdown_hosted_url": "https://olostep-storage.s3.us-east-1.amazonaws.com/markDown_6h89o8u1kt.txt",
    "json_hosted_url": null,
    "text_hosted_url": null,
    "links_on_page": [],
    "page_metadata": { "status_code": 200, "title": "" }
  }
}

抓取格式

通过 formats 选择一个或多个输出格式:
  • markdown: 适合LLM的markdown
  • html: 清理过的HTML
  • text: 纯文本
  • json: 结构化输出(通过解析器或llm_extract)
  • raw_pdf: 原始PDF字节提取到托管URL
  • screenshot: 通过动作设置以捕获截图并返回托管URL
输出键在 result 中以 *_content 字段和 *_hosted_url 返回。

提取结构化数据

你可以通过两种方式提取结构化JSON:使用解析器或LLM提取。

使用解析器(推荐用于规模)

定义 formats: ["json"] 并提供解析器 id
from olostep import Olostep

client = Olostep(api_key="YOUR_REAL_KEY")

result = client.scrapes.create(
    url_to_scrape="https://www.google.com/search?q=alexander+the+great&gl=us&hl=en",
    formats=["json"],
    parser="@olostep/google-search",
)

print(result.json_content)
Olostep 提供了一些预构建的解析器用于热门网站,但你也可以通过仪表板创建自己的解析器,或者请求我们的团队为你创建。 解析器是自愈的,会自动更新到网站的最新版本。

使用LLM提取(模式和/或提示)

提供 llm_extract 一个JSON模式(schema)和/或自然语言指令(prompt)。你可以传递这两个参数,但如果都提供了,schema 优先。 相反,如果你只传递一个 prompt,LLM将根据提示提取数据,并自行决定数据结构。
from olostep import LLMExtract, Olostep

client = Olostep(api_key="YOUR_REAL_KEY")

result = client.scrapes.create(
    url_to_scrape="https://www.berklee.edu/events/stefano-marchese-friends",
    formats=["markdown", "json"],
    llm_extract=LLMExtract(
        schema={
            "event": {
                "type": "object",
                "properties": {
                    "title": {"type": "string"},
                    "date": {"type": "string"},
                    "description": {"type": "string"},
                    "venue": {"type": "string"},
                    "address": {"type": "string"},
                    "start_time": {"type": "string"},
                },
            }
        }
    ),
)

print(result.json_content)
注意:result.json_content 返回一个字符串化的JSON。如果你需要一个对象,请在代码中解析它。

使用动作与页面交互

在抓取之前执行动作以与动态网站交互。支持的动作:
  • wait 伴随 milliseconds
  • click 伴随 selector
  • fill_input 伴随 selectorvalue
  • scroll 伴随 directionamount
在其他动作之前/之后使用 wait 通常很有用,以便页面加载。

示例

from olostep import FillInputAction, Olostep, WaitAction

client = Olostep(api_key="YOUR_REAL_KEY")

result = client.scrapes.create(
    url_to_scrape="https://example.com/login",
    formats=["markdown"],
    actions=[
        FillInputAction(selector="input[type=email]", value="john@example.com"),
        WaitAction(milliseconds=500),
        FillInputAction(selector="input[type=password]", value="secret"),
        {"type": "click", "selector": "button[type=\"submit\"]"},
        WaitAction(milliseconds=1500),
    ],
)

print(result.markdown_content)
响应将包括任何请求的格式(例如,markdown_content)。

使用案例

以下是一些客户使用 /scrapes 端点的实际应用。

内容分析与研究

  • 竞争分析: 从竞争对手网站提取产品详情、定价和功能
  • 市场研究: 分析登陆页面、产品描述和客户评价
  • 学术研究: 从科学出版物或研究门户收集特定数据
  • 法律文档: 从官方网站提取案例研究、法规或法律先例

电子商务与零售

  • 动态定价策略: 从竞争商店获取实时产品定价
  • 产品信息管理: 提取详细规格和描述
  • 库存监控: 检查其他零售商的产品可用性
  • 评论分析: 收集特定产品的消费者反馈和情感

营销与内容创作

  • 内容策展: 为新闻通讯提取相关文章和博客文章
  • SEO分析: 检查竞争对手的关键词使用、元描述和页面结构
  • 潜在客户生成: 从商业目录或公司页面提取联系信息
  • 影响者研究: 收集影响者个人资料的参与指标和内容风格
  • 个性化社交媒体生成: 通过分析客户网站创建AI驱动的社交媒体营销

数据应用

  • AI训练数据收集: 为机器学习模型收集特定示例
  • 自定义知识库构建: 从软件网站提取文档或说明
  • 历史数据档案: 在特定时间点保存网站内容
  • 结构化数据提取: 将网页内容转换为格式化数据集以供分析

监控与警报

  • 合规监控: 跟踪法律或监管网站的变化
  • 危机管理: 监控新闻网站以获取特定事件或组织的提及
  • 事件跟踪: 从场地或组织者网站提取即将举行的事件的详细信息
  • 服务状态监控: 检查特定平台或工具的服务状态页面

出版与媒体

  • 新闻聚合: 从官方来源提取突发新闻
  • 媒体监控: 在新闻网站上跟踪特定主题
  • 内容验证: 提取信息以核实声明或陈述
  • 多媒体提取: 为媒体库收集嵌入的视频、图像或音频

金融应用

  • 投资研究: 从公司网站提取财务报表或年度报告
  • 经济指标: 从政府或金融机构网站收集经济数据
  • 加密货币数据: 提取实时定价和市值信息
  • 金融新闻分析: 监控金融新闻网站以获取特定市场信号

技术应用

  • API文档提取: 收集技术文档以供参考
  • 集成测试: 提取网站元素以验证第三方集成
  • 无障碍测试: 分析网站结构以符合无障碍标准
  • 网页档案创建: 捕获完整的网站内容以供历史保存

集成场景

  • CRM系统: 使用来自公司网站或LinkedIn的数据增强客户资料
  • 内容管理系统: 导入相关的外部内容
  • 商业智能工具: 使用外部市场信息补充内部数据
  • 项目管理软件: 从客户网站提取规格或需求
  • 自定义仪表盘: 将提取的数据与内部指标一起显示

错误处理

所有错误都遵循一个共享的信封形状。检查 error.typeerror.code 以编程方式分支:
{
  "id": "error_abc123",
  "object": "error",
  "created": 1745673871,
  "url": "https://example.com",
  "metadata": {},
  "error": {
    "type": "...",
    "code": "...",
    "message": "..."
  }
}
HTTPerror.typeerror.code含义
400invalid_request_errordns_resolution_failed域名不存在或URL有拼写错误。
400invalid_request_errorinvalid_urlURL格式错误。
502invalid_request_errortls_error网站有无效或不兼容的TLS/SSL证书。error.detail 携带低级SSL代码。
504request_timeoutscrape_poll_timeout抓取未在约55秒的等待预算内完成。

DNS失败 (400)

域名无法解析。检查URL是否有拼写错误。
{
  "error": {
    "type": "invalid_request_error",
    "code": "dns_resolution_failed",
    "message": "URL包含拼写错误,或域名不存在。"
  }
}

TLS/SSL错误 (502)

目标网站有破损或不兼容的HTTPS配置。error.detail 提供特定的SSL错误代码以供诊断;error.code 始终为 tls_error
{
  "error": {
    "type": "invalid_request_error",
    "code": "tls_error",
    "detail": "err_ssl_tlsv1_alert_internal_error",
    "message": "网站关闭或拒绝了TLS握手。服务器可能配置错误或使用不支持的SSL/TLS版本。"
  }
}

请求超时 (504)

抓取未在等待预算内完成。页面可能很慢,受到机器人保护,或暂时不可用。此响应可以安全重试。
{
  "error": {
    "type": "request_timeout",
    "code": "scrape_poll_timeout",
    "message": "在等待抓取结果时请求超时。页面可能很慢,对我们的抓取器阻止,或暂时不可用。"
  }
}

定价

抓取默认消耗1个积分。如果你还传递解析器,费用根据解析器不同(1-5积分)。如果你使用LLM提取,则消耗20积分。