Spaces:
Runtime error
Runtime error
# Prefix-Based Input Handling in Crawl4AI | |
This guide will walk you through using the Crawl4AI library to crawl web pages, local HTML files, and raw HTML strings. We'll demonstrate these capabilities using a Wikipedia page as an example. | |
## Crawling a Web URL | |
To crawl a live web page, provide the URL starting with `http://` or `https://`, using a `CrawlerRunConfig` object: | |
```python | |
import asyncio | |
from crawl4ai import AsyncWebCrawler | |
from crawl4ai.async_configs import CrawlerRunConfig | |
async def crawl_web(): | |
config = CrawlerRunConfig(bypass_cache=True) | |
async with AsyncWebCrawler() as crawler: | |
result = await crawler.arun(url="https://en.wikipedia.org/wiki/apple", config=config) | |
if result.success: | |
print("Markdown Content:") | |
print(result.markdown) | |
else: | |
print(f"Failed to crawl: {result.error_message}") | |
asyncio.run(crawl_web()) | |
``` | |
## Crawling a Local HTML File | |
To crawl a local HTML file, prefix the file path with `file://`. | |
```python | |
import asyncio | |
from crawl4ai import AsyncWebCrawler | |
from crawl4ai.async_configs import CrawlerRunConfig | |
async def crawl_local_file(): | |
local_file_path = "/path/to/apple.html" # Replace with your file path | |
file_url = f"file://{local_file_path}" | |
config = CrawlerRunConfig(bypass_cache=True) | |
async with AsyncWebCrawler() as crawler: | |
result = await crawler.arun(url=file_url, config=config) | |
if result.success: | |
print("Markdown Content from Local File:") | |
print(result.markdown) | |
else: | |
print(f"Failed to crawl local file: {result.error_message}") | |
asyncio.run(crawl_local_file()) | |
``` | |
## Crawling Raw HTML Content | |
To crawl raw HTML content, prefix the HTML string with `raw:`. | |
```python | |
import asyncio | |
from crawl4ai import AsyncWebCrawler | |
from crawl4ai.async_configs import CrawlerRunConfig | |
async def crawl_raw_html(): | |
raw_html = "<html><body><h1>Hello, World!</h1></body></html>" | |
raw_html_url = f"raw:{raw_html}" | |
config = CrawlerRunConfig(bypass_cache=True) | |
async with AsyncWebCrawler() as crawler: | |
result = await crawler.arun(url=raw_html_url, config=config) | |
if result.success: | |
print("Markdown Content from Raw HTML:") | |
print(result.markdown) | |
else: | |
print(f"Failed to crawl raw HTML: {result.error_message}") | |
asyncio.run(crawl_raw_html()) | |
``` | |
--- | |
# Complete Example | |
Below is a comprehensive script that: | |
1. Crawls the Wikipedia page for "Apple." | |
2. Saves the HTML content to a local file (`apple.html`). | |
3. Crawls the local HTML file and verifies the markdown length matches the original crawl. | |
4. Crawls the raw HTML content from the saved file and verifies consistency. | |
```python | |
import os | |
import sys | |
import asyncio | |
from pathlib import Path | |
from crawl4ai import AsyncWebCrawler | |
from crawl4ai.async_configs import CrawlerRunConfig | |
async def main(): | |
wikipedia_url = "https://en.wikipedia.org/wiki/apple" | |
script_dir = Path(__file__).parent | |
html_file_path = script_dir / "apple.html" | |
async with AsyncWebCrawler() as crawler: | |
# Step 1: Crawl the Web URL | |
print("\n=== Step 1: Crawling the Wikipedia URL ===") | |
web_config = CrawlerRunConfig(bypass_cache=True) | |
result = await crawler.arun(url=wikipedia_url, config=web_config) | |
if not result.success: | |
print(f"Failed to crawl {wikipedia_url}: {result.error_message}") | |
return | |
with open(html_file_path, 'w', encoding='utf-8') as f: | |
f.write(result.html) | |
web_crawl_length = len(result.markdown) | |
print(f"Length of markdown from web crawl: {web_crawl_length}\n") | |
# Step 2: Crawl from the Local HTML File | |
print("=== Step 2: Crawling from the Local HTML File ===") | |
file_url = f"file://{html_file_path.resolve()}" | |
file_config = CrawlerRunConfig(bypass_cache=True) | |
local_result = await crawler.arun(url=file_url, config=file_config) | |
if not local_result.success: | |
print(f"Failed to crawl local file {file_url}: {local_result.error_message}") | |
return | |
local_crawl_length = len(local_result.markdown) | |
assert web_crawl_length == local_crawl_length, "Markdown length mismatch" | |
print("✅ Markdown length matches between web and local file crawl.\n") | |
# Step 3: Crawl Using Raw HTML Content | |
print("=== Step 3: Crawling Using Raw HTML Content ===") | |
with open(html_file_path, 'r', encoding='utf-8') as f: | |
raw_html_content = f.read() | |
raw_html_url = f"raw:{raw_html_content}" | |
raw_config = CrawlerRunConfig(bypass_cache=True) | |
raw_result = await crawler.arun(url=raw_html_url, config=raw_config) | |
if not raw_result.success: | |
print(f"Failed to crawl raw HTML content: {raw_result.error_message}") | |
return | |
raw_crawl_length = len(raw_result.markdown) | |
assert web_crawl_length == raw_crawl_length, "Markdown length mismatch" | |
print("✅ Markdown length matches between web and raw HTML crawl.\n") | |
print("All tests passed successfully!") | |
if html_file_path.exists(): | |
os.remove(html_file_path) | |
if __name__ == "__main__": | |
asyncio.run(main()) | |
``` | |
--- | |
# Conclusion | |
With the unified `url` parameter and prefix-based handling in **Crawl4AI**, you can seamlessly handle web URLs, local HTML files, and raw HTML content. Use `CrawlerRunConfig` for flexible and consistent configuration in all scenarios. |