Web_Scraper_Server / scraper.py
Amin1600's picture
added new date_range to prevent crash
314de7a
Raw
History Blame Contribute Delete
3.94 kB
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!')