-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
90 lines (67 loc) · 3.26 KB
/
main.py
File metadata and controls
90 lines (67 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import argparse
import os
from app.config import settings
from app.database import init_db
from app.scraper.manager import ScrapeManager
from app.sender.worker import process_batch
from app.utils.logger import logger
def main():
parser = argparse.ArgumentParser(description="MAKE LEAD GEN - CLI")
subparsers = parser.add_subparsers(dest="command", help="Команди", required=True)
# Команда: init
subparsers.add_parser("init", help="Ініціалізувати базу даних")
# Команда: send
subparsers.add_parser("send", help="Відправити дані на Webhook")
# Команда: maps
maps_parser = subparsers.add_parser("maps", help="Сценарій 1: Google Maps")
maps_parser.add_argument("-q", "--query", required=True, help="Пошуковий запит")
# Команда: search
search_parser = subparsers.add_parser("search", help="Сценарій 2: Google Search")
search_parser.add_argument("-q", "--query", required=True, help="Пошуковий запит")
# Команда: hybrid (Search + Deep Scrape)
hybrid_parser = subparsers.add_parser(
"hybrid", help="Сценарій 3: Search -> Deep Scrape"
)
hybrid_parser.add_argument("-q", "--query", required=True, help="Пошуковий запит")
# Команда: file (TXT -> Deep Scrape)
file_parser = subparsers.add_parser(
"file", help="Сценарій 4: TXT File -> Deep Scrape"
)
file_parser.add_argument(
"-f", "--filepath", required=True, help="Шлях до txt файлу з посиланнями"
)
args = parser.parse_args()
logger.info(f"Запуск CLI з командою: {args.command}")
if args.command == "init":
init_db()
elif args.command == "send":
process_batch()
elif args.command in ["maps", "search", "hybrid", "file"]:
manager = ScrapeManager()
if args.command == "maps":
manager.run_maps_pipeline(args.query)
elif args.command == "search":
manager.run_search_pipeline(args.query)
elif args.command == "hybrid":
# Спочатку отримуємо органіку, потім парсимо глибоко
search_resp = manager.client.search(args.query)
# ОБРІЗАЄМО МАСИВ ПЕРЕД DEEP SCRAPE
organic_results = search_resp.organic[: settings.SERPER_MAX_RESULTS]
targets = [
{"url": item.link, "name": item.title} for item in organic_results
]
manager.run_deep_scrape(targets)
elif args.command == "file":
if not os.path.exists(args.filepath):
logger.error(f"Файл {args.filepath} не знайдено.")
return
with open(args.filepath, "r", encoding="utf-8") as f:
urls = [line.strip() for line in f if line.strip()]
urls = urls[: settings.SERPER_MAX_RESULTS]
targets = [{"url": url} for url in urls]
# Явно вказуємо, що джерело - file
manager.run_deep_scrape(
targets, source_method="file", max_workers=settings.SCRAPER_MAX_WORKERS
)
if __name__ == "__main__":
main()