Facility: 032773

First Security Self Storage

Stale Data Warning: This facility has not been successfully scraped in 26 days (threshold: 3 days). Data may be outdated.
Facility Information active
Facility ID
032773
Name
First Security Self Storage
URL
http://www.firstsecurityselfstorage.com/
Address
495 Industrial Park Rd, Blacksburg, VA 24060, USA, Blacksburg, Virginia 24060
Platform
custom_facility_032773
Parser File
src/parsers/custom/facility_032773_parser.py
Last Scraped
2026-03-27 13:44:42.668532
Created
2026-03-20 23:23:10.660695
Updated
2026-03-27 13:44:42.695639
Parser & Healing Diagnosis working
Parser Status
✓ Working
Status Reason
N/A
Last Healing Attempt
Not attempted
Parser Source (src/parsers/custom/facility_032773_parser.py)
"""Parser for First Security Self Storage."""

from __future__ import annotations

import re

from bs4 import BeautifulSoup

from src.parsers.base import BaseParser, ParseResult, UnitResult


class Facility032773Parser(BaseParser):
    """Extract storage units from First Security Self Storage."""

    platform = "custom_facility_032773"

    def parse(self, html: str, url: str = "") -> ParseResult:
        soup = BeautifulSoup(html, "lxml")
        result = ParseResult(platform=self.platform, parser_name=self.__class__.__name__)

        # Sizes are grouped in column divs under a "text-center" row
        row = soup.find("div", class_=re.compile(r"row.*text-center|text-center.*row"))
        if row:
            col_divs = row.find_all("div", class_=re.compile(r"col-"))
            for col in col_divs:
                # Each column has sizes separated by <br>
                text = col.get_text(separator="\n", strip=True)
                for line in text.split("\n"):
                    line = line.strip()
                    if re.match(r"^\d+[xX]\d+$", line):
                        unit = UnitResult()
                        unit.size = line
                        w, ln, sq = self.normalize_size(line)
                        if w is not None:
                            unit.metadata = {"width": w, "length": ln, "sqft": sq}
                        result.units.append(unit)

        if not result.units:
            result.warnings.append("No units found on page")

        return result

Scrape Runs (4)

Run #1090 Details

Status
exported
Parser Used
Facility032773Parser
Platform Detected
unknown
Units Found
11
Stage Reached
exported
Timestamp
2026-03-23 02:45:01.036709
Timing
Stage Duration
Fetch4817ms
Detect8ms
Parse6ms
Export5ms

Snapshot: 032773_20260323T024505Z.html · Show Snapshot · Open in New Tab

Parsed Units (11)

5x5

No price

5x10

No price

10x10

No price

11x20

No price

12x25

No price

20x20

No price

15x35

No price

20x35

No price

18x50

No price

55x45

No price

59x50

No price

← Back to dashboard