Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """Scrape tp.edu.sg SEN pages locally and save to data/raw/tp_sen/. | |
| Run this once before deploying to bundle TP content with the deployment.""" | |
| import asyncio | |
| import os | |
| import ssl | |
| import sys | |
| from pathlib import Path | |
| sys.path.insert(0, str(Path(__file__).parent.parent)) | |
| ssl._create_default_https_context = ssl._create_unverified_context | |
| import httpx | |
| _orig_client = httpx.Client.__init__ | |
| def _patch(self, *a, **kw): kw.setdefault("verify", False); _orig_client(self, *a, **kw) | |
| httpx.Client.__init__ = _patch | |
| _orig_async = httpx.AsyncClient.__init__ | |
| def _patch_async(self, *a, **kw): kw.setdefault("verify", False); _orig_async(self, *a, **kw) | |
| httpx.AsyncClient.__init__ = _patch_async | |
| import logging | |
| logging.basicConfig(level="INFO", format="%(asctime)s %(levelname)s %(name)s: %(message)s") | |
| from app.config import CRAWL_SOURCES | |
| from app.ingestion.scraper import scrape_source | |
| RAW_DIR = Path(__file__).parent.parent / "data" / "raw" | |
| async def main(): | |
| tp_source = next(s for s in CRAWL_SOURCES if s["label"] == "tp_sen") | |
| print(f"\nScraping TP SEN from: {tp_source['seed_url']}") | |
| print(f"Saving to: {RAW_DIR / 'tp_sen'}\n") | |
| pages = await scrape_source(tp_source, RAW_DIR) | |
| print(f"\nDone: {len(pages)} pages saved to data/raw/tp_sen/") | |
| for p in pages: | |
| print(f" [{p.crawl_depth}] {p.source_url}") | |
| if __name__ == "__main__": | |
| asyncio.run(main()) | |