抓取结果及输出

当你打电话时arun()在页面上,Crawl4AI 返回CrawlResult对象包含您可能需要的所有内容——原始 HTML、清理后的版本、可选的屏幕截图或 PDF、结构化提取结果等等。本文档将解释这些字段以及它们如何映射到不同的输出类型。


1.CrawlResult模型

以下是核心架构。每个字段捕获抓取结果的不同方面:

class MarkdownGenerationResult(BaseModel):
    raw_markdown: str
    markdown_with_citations: str
    references_markdown: str
    fit_markdown: Optional[str] = None
    fit_html: Optional[str] = None

class CrawlResult(BaseModel):
    url: str
    html: str
    success: bool
    cleaned_html: Optional[str] = None
    media: Dict[str, List[Dict]] = {}
    links: Dict[str, List[Dict]] = {}
    downloaded_files: Optional[List[str]] = None
    screenshot: Optional[str] = None
    pdf : Optional[bytes] = None
    mhtml: Optional[str] = None
    markdown: Optional[Union[str, MarkdownGenerationResult]] = None
    extracted_content: Optional[str] = None
    metadata: Optional[dict] = None
    error_message: Optional[str] = None
    session_id: Optional[str] = None
    response_headers: Optional[dict] = None
    status_code: Optional[int] = None
    ssl_certificate: Optional[SSLCertificate] = None
    class Config:
        arbitrary_types_allowed = True

表:关键字段CrawlResult

字段(名称和类型) 描述
网址(str ) 抓取的最终或实际 URL(重定向的情况下)。
html(str ) 原始、未经修改的页面 HTML。适合用于调试或自定义处理。
成功 (bool ) 如果爬取完成且没有重大错误,否则False
cleaned_html(Optional[str] ) 已清理的 HTML,删除了脚本/样式;如果通过配置,则可以排除标签excluded_tagsETC。
媒体 (Dict[str, List[Dict]] ) 提取媒体信息(图像、音频等),每个信息都具有如下属性srcaltscore , ETC。
链接(Dict[str, List[Dict]] ) 提取链接数据,按以下方式拆分internalexternal. 每个链接通常有hreftext , ETC。
下载的文件(Optional[List[str]] ) 如果accept_downloads=TrueBrowserConfig,列出了已保存下载的文件路径。
截屏 (Optional[str] ) 页面截图(base64编码)screenshot=True
pdf(Optional[bytes] ) 页面的 PDF 格式pdf=True
mhtml(Optional[str] ) 页面的 MHTML 快照capture_mhtml=True. 包含所有资源的完整页面。
降价(Optional[str or MarkdownGenerationResult] ) 它拥有MarkdownGenerationResult随着时间的推移,这将被整合到markdown。生成器可以提供原始 markdown、引用、参考文献,以及可选的fit_markdown
提取的内容(Optional[str] ) 结构化提取(基于 CSS/LLM)的输出存储为 JSON 字符串或其他文本。
元数据(Optional[dict] ) 有关抓取或提取的数据的附加信息。
错误信息 (Optional[str] ) 如果success=False,包含对出错情况的简短描述。
会话 ID(Optional[str] ) 用于多页面或持久抓取的会话的ID。
响应头(Optional[dict] ) HTTP 响应标头(如果捕获)。
状态代码(Optional[int] ) HTTP 状态代码(例如,200 表示 OK)。
ssl_证书(Optional[SSLCertificate] ) SSL 证书信息(如果fetch_ssl_certificate=True

2. HTML变体

:原始 HTML

Crawl4AI 保留精确的 HTMLresult.html . 适用于:

  • 调试页面问题或检查原始内容。
  • 如果需要,执行您自己的专门解析。

:已消毒

如果您在CrawlerRunConfig(喜欢excluded_tagsremove_forms等),您将在这里看到结果:

config = CrawlerRunConfig(
    excluded_tags=["form", "header", "footer"],
    keep_data_attributes=False
)
result = await crawler.arun("https://example.com", config=config)
print(result.cleaned_html)  # Freed of forms, header, footer, data-* attributes

3. Markdown 生成

3.1markdown

  • :Markdown 详细输出的当前位置,返回MarkdownGenerationResult目的。
  • :自 v0.5 起已弃用。

字段:

场地 描述
raw_markdown 基本的 HTML→Markdown 转换。
markdown_with_citations Markdown 包括在末尾引用链接的内联引用。
引用_markdown 参考文献/引文本身(如果citations=True)。
fit_markdown 如果使用了内容过滤器,则过滤/“适合”标记。
fit_html 生成的经过过滤的 HTMLfit_markdown

3.2 Markdown 生成器的基本示例

from crawl4ai import AsyncWebCrawler, CrawlerRunConfig
from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator

config = CrawlerRunConfig(
    markdown_generator=DefaultMarkdownGenerator(
        options={"citations": True, "body_width": 80}  # e.g. pass html2text style options
    )
)
result = await crawler.arun(url="https://example.com", config=config)

md_res = result.markdown  # or eventually 'result.markdown'
print(md_res.raw_markdown[:500])
print(md_res.markdown_with_citations)
print(md_res.references_markdown)

注意:如果您使用类似PruningContentFilter,你会得到fit_markdownfit_html也一样。


4.结构化提取:extracted_content

如果您运行基于 JSON 的提取策略(CSS、XPath、LLM 等),则结构化数据不会存储在markdown—它被放置在result.extracted_content作为 JSON 字符串(或有时是纯文本)。

示例:使用 CSS 提取raw://HTML

import asyncio
import json
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode
from crawl4ai import JsonCssExtractionStrategy

async def main():
    schema = {
        "name": "Example Items",
        "baseSelector": "div.item",
        "fields": [
            {"name": "title", "selector": "h2", "type": "text"},
            {"name": "link", "selector": "a", "type": "attribute", "attribute": "href"}
        ]
    }
    raw_html = "<div class='item'><h2>Item 1</h2><a href='https://example.com/item1'>Link 1</a></div>"

    async with AsyncWebCrawler() as crawler:
        result = await crawler.arun(
            url="raw://" + raw_html,
            config=CrawlerRunConfig(
                cache_mode=CacheMode.BYPASS,
                extraction_strategy=JsonCssExtractionStrategy(schema)
            )
        )
        data = json.loads(result.extracted_content)
        print(data)

if __name__ == "__main__":
    asyncio.run(main())

这里: -url="raw://..."直接传递 HTML 内容,无需网络请求。 - CSS 提取策略填充result.extracted_content使用 JSON 数组[{"title": "...", "link": "..."}]


字典,通常包含"internal""external"列表。每个条目可能有hreftexttitle等。如果您没有禁用链接提取,则会自动捕获此信息。

print(result.links["internal"][:3])  # Show first 3 internal links

5.2media

类似地,"images""audio""video"等。每项可以包括srcaltscore以及更多,如果您的爬虫程序设置为收集它们。

images = result.media.get("images", [])
for img in images:
    print("Image URL:", img["src"], "Alt:", img.get("alt"))

5.3screenshotpdf , 和mhtml

如果你设置screenshot=Truepdf=True , 或者capture_mhtml=TrueCrawlerRunConfig, 然后:

  • 包含 base64 编码的 PNG 字符串。
  • 包含原始 PDF 字节(您可以将它们写入文件)。
  • 包含页面的 MHTML 快照作为字符串(您可以将其写入 .mhtml 文件)。
# Save the PDF
with open("page.pdf", "wb") as f:
    f.write(result.pdf)

# Save the MHTML
if result.mhtml:
    with open("page.mhtml", "w", encoding="utf-8") as f:
        f.write(result.mhtml)

MHTML(MIME HTML)格式特别有用,因为它将整个网页及其所有资源(CSS、图像、脚本等)捕获到一个文件中,非常适合存档或离线查看。

5.4ssl_certificate

如果fetch_ssl_certificate=Trueresult.ssl_certificate保存有关网站 SSL 证书的详细信息,例如颁发者、有效日期等。


6.访问这些字段

运行后:

result = await crawler.arun(url="https://example.com", config=some_config)

检查任意字段:

if result.success:
    print(result.status_code, result.response_headers)
    print("Links found:", len(result.links.get("internal", [])))
    if result.markdown:
        print("Markdown snippet:", result.markdown.raw_markdown[:200])
    if result.extracted_content:
        print("Structured JSON:", result.extracted_content)
else:
    print("Error:", result.error_message)

弃用:自 v0.5 起result.markdown_v2result.fit_htmlresult.fit_markdown已弃用。使用result.markdown相反!它MarkdownGenerationResult,其中包括fit_htmlfit_markdown因为它的属性。


7. 后续步骤

  • Markdown 生成:深入了解如何配置DefaultMarkdownGenerator以及各种过滤器。
  • 内容过滤:了解如何使用BM25ContentFilterPruningContentFilter
  • 会话和钩子:如果你想操作页面或跨多个保存状态arun()调用,请参阅挂钩或会话文档。
  • LLM 提取:对于需要 AI 驱动解析的复杂或非结构化内容,请检查基于 LLM 的策略文档。

享受探索这一切CrawlResult提供——无论您需要原始 HTML、清理输出、markdown 还是完全结构化的数据,Crawl4AI 都能满足您的需求!


> Feedback