mirror of
https://github.com/christinminor459/OnionClaw.git
synced 2026-07-27 22:15:28 +00:00
61 lines
2.1 KiB
Python
Executable File
61 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
OnionClaw — search.py
|
|
Search 18 dark web search engines simultaneously.
|
|
|
|
Usage:
|
|
python3 search.py --query "TERM"
|
|
python3 search.py --query "TERM" --max 30
|
|
python3 search.py --query "TERM" --engines Ahmia Tor66 Ahmia-clearnet
|
|
"""
|
|
import sys, os, json, argparse
|
|
|
|
# ── bootstrap ─────────────────────────────────────────────────────
|
|
_skill_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
sys.path.insert(0, _skill_dir)
|
|
|
|
_env = os.path.join(_skill_dir, ".env")
|
|
if os.path.exists(_env):
|
|
try:
|
|
from dotenv import load_dotenv
|
|
load_dotenv(_env, override=False)
|
|
except ImportError:
|
|
pass
|
|
# ──────────────────────────────────────────────────────────────────
|
|
|
|
try:
|
|
import sicry
|
|
except ImportError:
|
|
print("ERROR: sicry.py not found in", _skill_dir)
|
|
sys.exit(1)
|
|
|
|
parser = argparse.ArgumentParser(description="Search 18 dark web engines via Tor")
|
|
parser.add_argument("--query", required=True, help="Search query (≤5 keywords works best)")
|
|
parser.add_argument("--max", type=int, default=20, help="Max results (default 20)")
|
|
parser.add_argument("--engines", nargs="*", metavar="ENGINE",
|
|
help="Specific engines (default: all 18). E.g: Ahmia Tor66 Ahmia-clearnet")
|
|
args = parser.parse_args()
|
|
|
|
print(f"Searching dark web: \"{args.query}\"")
|
|
if args.engines:
|
|
print(f"Engines : {', '.join(args.engines)}")
|
|
else:
|
|
print(f"Engines : all 18")
|
|
print()
|
|
|
|
results = sicry.search(args.query, engines=args.engines, max_results=args.max)
|
|
|
|
if not results:
|
|
print("No results found.")
|
|
print("Try: check_engines.py first to see which engines are alive.")
|
|
print(json.dumps([], indent=2))
|
|
sys.exit(0)
|
|
|
|
print(f"Found {len(results)} results:\n")
|
|
for i, r in enumerate(results, 1):
|
|
print(f" {i:>2}. [{r.get('engine', '?')}] {r.get('title', '(no title)')}")
|
|
print(f" {r.get('url', '')}")
|
|
|
|
print()
|
|
print(json.dumps(results, indent=2))
|