35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
import argparse
|
|
import asyncio
|
|
import os
|
|
import sys
|
|
from crawler import Crawler, CrawlerConfig
|
|
|
|
|
|
async def run_cli():
|
|
config = CrawlerConfig.from_env_or_prompt()
|
|
crawler = Crawler(config)
|
|
await crawler.run()
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Clickduck - Web Crawler & Link Explorer")
|
|
parser.add_argument("--web", action="store_true", help="Launch the Web Frontend dashboard")
|
|
parser.add_argument("--host", type=str, default=os.getenv("HOST", "127.0.0.1"), help="Host IP for web UI (default: 127.0.0.1 or $HOST)")
|
|
parser.add_argument("--port", type=int, default=int(os.getenv("PORT", "8000")), help="Port for web UI (default: 8000 or $PORT)")
|
|
args = parser.parse_args()
|
|
|
|
if args.web:
|
|
from web import run_server
|
|
run_server(host=args.host, port=args.port)
|
|
else:
|
|
try:
|
|
asyncio.run(run_cli())
|
|
except KeyboardInterrupt:
|
|
print("\nCrawling interrupted by user.")
|
|
sys.exit(0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if sys.platform == "win32":
|
|
asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
|
|
main()
|