Source code for langchain_community.document_loaders.firecrawl
from typing import Iterator, Literal, Optional
from langchain_core.document_loaders import BaseLoader
from langchain_core.documents import Document
from langchain_core.utils import get_from_env
[docs]class FireCrawlLoader(BaseLoader):
"""使用FireCrawl将网页加载为文档。
必须安装Python包`firecrawl`并拥有FireCrawl API密钥。请参见
https://www.firecrawl.dev/ 了解更多。"""
[docs] def __init__(
self,
url: str,
*,
api_key: Optional[str] = None,
mode: Literal["crawl", "scrape"] = "crawl",
params: Optional[dict] = None,
):
"""使用API密钥和URL进行初始化。
参数:
url: 要爬取的URL。
api_key: Firecrawl API密钥。如果未指定,将从环境变量FIREWALL_API_KEY中读取。获取API密钥
mode: 加载程序运行的模式。默认为“crawl”。
选项包括“scrape”(单个URL)和
“crawl”(所有可访问的子页面)。
params: 传递给Firecrawl API的参数。
示例包括crawlerOptions。
有关更多详细信息,请访问:https://github.com/mendableai/firecrawl-py
"""
try:
from firecrawl import FirecrawlApp
except ImportError:
raise ImportError(
"`firecrawl` package not found, please run `pip install firecrawl-py`"
)
if mode not in ("crawl", "scrape"):
raise ValueError(
f"Unrecognized mode '{mode}'. Expected one of 'crawl', 'scrape'."
)
api_key = api_key or get_from_env("api_key", "FIREWALL_API_KEY")
self.firecrawl = FirecrawlApp(api_key=api_key)
self.url = url
self.mode = mode
self.params = params
[docs] def lazy_load(self) -> Iterator[Document]:
if self.mode == "scrape":
firecrawl_docs = [self.firecrawl.scrape_url(self.url, params=self.params)]
elif self.mode == "crawl":
firecrawl_docs = self.firecrawl.crawl_url(self.url, params=self.params)
else:
raise ValueError(
f"Unrecognized mode '{self.mode}'. Expected one of 'crawl', 'scrape'."
)
for doc in firecrawl_docs:
yield Document(
page_content=doc.get("markdown", ""),
metadata=doc.get("metadata", {}),
)