Spaces:
Configuration error
Configuration error
| import os | |
| import logging | |
| import sys | |
| from datetime import datetime | |
| from pathlib import Path | |
| from dotenv import load_dotenv | |
| from huggingface_hub import HfApi | |
| from zoneinfo import ZoneInfo | |
| # Import modules | |
| from ingestion.jobstreet.jobstreet_scraper import js_scraper, get_total_pages | |
| from ingestion.linkedin.linkedin_scraper import ld_scraper | |
| SEARCH_TERMS = [ | |
| "Data Engineer", | |
| "Data Analyst", | |
| "Data Scientist", | |
| "Machine Learning Engineer", | |
| ] | |
| js_date_range = { | |
| "daily": 1, | |
| "weekly": 7, | |
| "montly": 31, | |
| "None": None | |
| } | |
| ld_date_range = { | |
| "daily": "r86400", | |
| "weekly": "r604800", | |
| "montly": "r2592000", | |
| "None": None | |
| } | |
| app_logger = logging.getLogger(__name__) | |
| def upload_to_hf(): | |
| """Sends local JSONL data and active log files to permanent HF Dataset storage""" | |
| token = os.environ.get("HF_TOKEN") | |
| if not token: | |
| app_logger.warning("β οΈ HF_TOKEN not found in environment variables. Skipping cloud sync.") | |
| return | |
| api = HfApi(token=token) | |
| repo_target = "Amin1600/Web_Scraper_Data" | |
| app_logger.info("π¦ Commencing synchronization with Hugging Face Dataset vault...") | |
| try: | |
| # 1. Upload your data folder contents (.jsonl files) | |
| if os.path.exists("data") and os.listdir("data"): | |
| api.upload_folder( | |
| folder_path="data", | |
| path_in_repo="job_data", # Folder name inside your dataset repo | |
| repo_id=repo_target, | |
| repo_type="dataset" | |
| ) | |
| app_logger.info("π Scraping data (.jsonl) successfully backed up to HF Datasets!") | |
| # 2. Upload your logs folder contents (.log files) | |
| if os.path.exists("logs") and os.listdir("logs"): | |
| api.upload_folder( | |
| folder_path="logs", | |
| path_in_repo="logs", # Folder name inside your dataset repo | |
| repo_id=repo_target, | |
| repo_type="dataset" | |
| ) | |
| app_logger.info("π System execution logs successfully backed up to HF Datasets!") | |
| except Exception as e: | |
| app_logger.error(f"β Failed to sync files to Hugging Face Dataset: {e}") | |
| def job_scraper(job_title="Data Analyst", target_location="Kuala Lumpur", date_range="None", run_type="scheduled"): | |
| kl_timezone = ZoneInfo("Asia/Kuala_Lumpur") | |
| timestamp = datetime.now(kl_timezone).strftime('%d-%m-%Y, %H:%M:%S') | |
| if date_range == "all" or date_range is None: | |
| date_range = "None" | |
| if run_type == 'scheduled': | |
| app_logger.info("π Scheduler successfully armed for midnight Malaysia Time.") | |
| app_logger.info(f"β° Starting Scheduled web scraper run for {job_title} job listings. {timestamp}") | |
| app_logger.info("π Scraping jobs from Jobstreet") | |
| js_scraper(job_type = job_title, location = target_location, date_range = js_date_range[date_range]) | |
| app_logger.info("π Scraping jobs from Linkedin") | |
| ld_scraper(job_type = job_title, location = target_location, date_range = ld_date_range[date_range]) | |
| app_logger.info("π All scraping tasks completed successfully.") | |
| upload_to_hf() | |
| elif run_type == 'manual': | |
| app_logger.info(f"Manual run, searching for {date_range or "all"} listings.") | |
| app_logger.info(f"Starting web scraper run for {job_title} job listings. {timestamp}") | |
| app_logger.info("π Scraping jobs from Jobstreet") | |
| js_scraper(job_type = job_title, location = target_location, date_range = js_date_range[date_range]) | |
| app_logger.info("π Scraping jobs from Linkedin") | |
| ld_scraper(job_type = job_title, location = target_location, date_range = ld_date_range[date_range]) | |
| app_logger.info("π All scraping tasks completed successfully.") | |
| upload_to_hf() | |
| else: | |
| app_logger.warning('π Undetermined run type task is unable to start!') | |