Facility: 062106

Hideaway Storage Co

Stale Data Warning: This facility has not been successfully scraped in 30 days (threshold: 3 days). Data may be outdated.
Facility Information active
Facility ID
062106
Name
Hideaway Storage Co
URL
https://www.hideawaystorageco.com/1220-skeels-st-sheridan-wy-82801
Address
N/A
Platform
custom_facility_062106
Parser File
src/parsers/custom/facility_062106_parser.py
Last Scraped
2026-03-23 03:19:01.087399
Created
2026-03-06 23:45:35.865957
Updated
2026-03-23 03:19:01.087399
Parser & Healing Diagnosis needs_fix
Parser Status
⚠ Needs Fix
Status Reason
Parser returned 0 units
Last Healing Attempt
Not attempted
Parser Source (src/parsers/custom/facility_062106_parser.py)
"""Parser for Hideaway Storage Co (Sheridan, WY) — facility 062106.

The site renders a storageunitsoftware-style table with obfuscated CSS class
names.  Unit rows live inside a <tbody class="_3ogtyi-n17Czad9YYVE_mv"> with
four cells per row:
  td[0]  size  (div._2MVARJZtZDaHzpMVh0UAfo)
  td[1]  description text
  td[2]  price (div._3V2N9w-4bQvYJ9lUWBSkHt)
  td[3]  action buttons — "Reserve" = available, "Call" = call-for-availability
"""

from __future__ import annotations

from bs4 import BeautifulSoup

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


class Facility062106Parser(BaseParser):
    """Extract storage units from Hideaway Storage Co (facility 062106)."""

    platform = "custom_facility_062106"

    _TBODY_CLASS = "_3ogtyi-n17Czad9YYVE_mv"
    _SIZE_CLASS = "_2MVARJZtZDaHzpMVh0UAfo"
    _PRICE_CLASS = "_3V2N9w-4bQvYJ9lUWBSkHt"

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

        tbody = soup.find("tbody", class_=self._TBODY_CLASS)
        if not tbody:
            result.warnings.append("Unit table body not found on page")
            return result

        rows = tbody.find_all("tr")
        for row in rows:
            tds = row.find_all("td")
            if len(tds) < 3:
                continue

            unit = UnitResult()

            # Size — first cell
            size_el = tds[0].find(class_=self._SIZE_CLASS)
            if size_el:
                size_text = size_el.get_text(strip=True)
                unit.size = size_text
                w, ln, sq = self.normalize_size(size_text)
                if w is not None:
                    unit.metadata = {"width": w, "length": ln, "sqft": sq}

            # Description — second cell (plain text)
            desc_text = tds[1].get_text(separator=" ", strip=True)
            if desc_text:
                unit.description = desc_text

            # Price — third cell
            price_el = tds[2].find(class_=self._PRICE_CLASS)
            if price_el:
                unit.price = self.normalize_price(price_el.get_text(strip=True))

            # Scarcity / availability — fourth cell (optional)
            if len(tds) >= 4:
                action_text = tds[3].get_text(separator=" ", strip=True)
                if "Call" in action_text and "Reserve" not in action_text:
                    unit.scarcity = "Call for availability"
                elif "Reserve" in action_text or "Move In" in action_text:
                    unit.scarcity = "Available"

            if unit.size or unit.price:
                result.units.append(unit)

        if not result.units:
            result.warnings.append("No units found in table body")

        return result

Scrape Runs (5)

Run #983 Details

Status
exported
Parser Used
Facility062106Parser
Platform Detected
storageunitsoftware
Units Found
0
Stage Reached
exported
Timestamp
2026-03-21 19:11:51.162961
Timing
Stage Duration
Fetch5396ms
Detect59ms
Parse22ms
Export2ms

Snapshot: 062106_20260321T191156Z.html · Show Snapshot · Open in New Tab

No units found in this run.

All Failures for this Facility (5)

parse _WarningAsException scraper no_units_extracted warning Run #N/A | 2026-03-23 03:19:01.081548

No units extracted for 062106

Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 062106
parse _WarningAsException scraper no_units_extracted warning Run #N/A | 2026-03-21 19:11:56.660637

No units extracted for 062106

Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 062106
parse _WarningAsException scraper no_units_extracted warning Run #N/A | 2026-03-14 16:54:25.026154

No units extracted for 062106

Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 062106
parse _WarningAsException scraper no_units_extracted warning Run #N/A | 2026-03-14 01:06:10.273518

No units extracted for 062106

Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 062106
parse _WarningAsException scraper no_units_extracted warning Run #N/A | 2026-03-13 21:40:40.609183

No units extracted for 062106

Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 062106

← Back to dashboard