抓取结果及输出
当你打电话时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_tags ETC。 |
媒体 (Dict[str, List[Dict]] ) |
提取媒体信息(图像、音频等),每个信息都具有如下属性src ,alt ,score , ETC。 |
链接(Dict[str, List[Dict]] ) |
提取链接数据,按以下方式拆分internal 和external . 每个链接通常有href ,text , ETC。 |
下载的文件(Optional[List[str]] ) |
如果accept_downloads=True 在BrowserConfig ,列出了已保存下载的文件路径。 |
截屏 (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_tags
,remove_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_markdown
和fit_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": "..."}]
。
5.更多字段:链接、媒体等
5.1links
字典,通常包含"internal"
和"external"
列表。每个条目可能有href
,text
,title
等。如果您没有禁用链接提取,则会自动捕获此信息。
5.2media
类似地,"images"
,"audio"
,"video"
等。每项可以包括src
,alt
,score
以及更多,如果您的爬虫程序设置为收集它们。
images = result.media.get("images", [])
for img in images:
print("Image URL:", img["src"], "Alt:", img.get("alt"))
5.3screenshot
,pdf
, 和mhtml
如果你设置screenshot=True
,pdf=True
, 或者capture_mhtml=True
在CrawlerRunConfig
, 然后:
- 包含 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=True
,result.ssl_certificate
保存有关网站 SSL 证书的详细信息,例如颁发者、有效日期等。
6.访问这些字段
运行后:
检查任意字段:
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_v2
,result.fit_html
,result.fit_markdown
已弃用。使用result.markdown
相反!它MarkdownGenerationResult
,其中包括fit_html
和fit_markdown
因为它的属性。
7. 后续步骤
- Markdown 生成:深入了解如何配置
DefaultMarkdownGenerator
以及各种过滤器。 - 内容过滤:了解如何使用
BM25ContentFilter
和PruningContentFilter
。 - 会话和钩子:如果你想操作页面或跨多个保存状态
arun()
调用,请参阅挂钩或会话文档。 - LLM 提取:对于需要 AI 驱动解析的复杂或非结构化内容,请检查基于 LLM 的策略文档。
享受探索这一切CrawlResult
提供——无论您需要原始 HTML、清理输出、markdown 还是完全结构化的数据,Crawl4AI 都能满足您的需求!