Facility: 009218

CAR-GO Self Storage Reynoldsburg, OH

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
009218
Name
CAR-GO Self Storage Reynoldsburg, OH
URL
https://u-stor.com/self-storage/reynoldsburg-oh-43068-9100/
Address
14653 E Broad St, Reynoldsburg, OH 43068, USA, Reynoldsburg, Ohio 43068
Platform
custom_facility_009218
Parser File
src/parsers/custom/facility_009218_parser.py
Last Scraped
2026-03-27 13:40:32.553463
Created
2026-03-23 02:35:08.816820
Updated
2026-03-27 13:40:32.579465
Parser & Healing Diagnosis working
Parser Status
✓ Working
Status Reason
N/A
Last Healing Attempt
Not attempted
Parser Source (src/parsers/custom/facility_009218_parser.py)
"""Parser for CAR-GO Self Storage (u-stor.com, Reynoldsburg OH)."""

from __future__ import annotations

import re

from bs4 import BeautifulSoup

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


class Facility009218Parser(BaseParser):
    """Extract storage units from CAR-GO Self Storage.

    This site uses the DRTS (Directories Pro) WordPress plugin with numbered
    field variants per unit. Sizes are in ``data-name`` attributes matching
    ``entity_field_field_storage_size*``. Descriptions are in similarly named
    fields. Prices are not listed on the page (call-for-pricing model).
    """

    platform = "custom_facility_009218"

    # Matches the data-name attribute values for size fields across all units.
    _SIZE_FIELD_RE = re.compile(r"entity_field_field_storage_size")
    _DESC_FIELD_RE = re.compile(r"entity_field_field_(description|storage_unit_description)")
    _DOOR_FIELD_RE = re.compile(r"entity_field_field_door_types")

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

        # Find all size elements by data-name attribute pattern.
        size_divs = soup.find_all(
            "div",
            attrs={"data-name": self._SIZE_FIELD_RE},
        )

        # Filter to only the content divs (not their parent column wrappers).
        # Content divs have class containing "drts-display-element-inlineable".
        size_divs = [
            div for div in size_divs
            if "drts-display-element-inlineable" in div.get("class", [])
        ]

        if not size_divs:
            result.warnings.append("No unit size elements found")
            return result

        for size_div in size_divs:
            size_text = size_div.get_text(strip=True)
            if not size_text:
                continue

            w, ln, sqft = self.normalize_size(size_text)
            if w is None:
                continue

            unit = UnitResult(
                size=size_text,
                url=url,
                metadata={"width": w, "length": ln, "sqft": sqft},
            )

            # Walk up to the parent row (columns container) to find sibling
            # description and door-type fields.
            row = size_div.find_parent(
                "div", class_=re.compile(r"drts-row"),
            )
            if row:
                desc_div = row.find(
                    "div",
                    attrs={"data-name": self._DESC_FIELD_RE},
                )
                if desc_div:
                    unit.description = desc_div.get_text(strip=True)[:200]

                door_div = row.find(
                    "div",
                    attrs={"data-name": self._DOOR_FIELD_RE},
                )
                if door_div:
                    door_text = door_div.get_text(strip=True)
                    unit.metadata["door_type"] = door_text

            result.units.append(unit)

        if not result.units:
            result.warnings.append("Size elements found but no valid units extracted")

        result.warnings.append("No pricing on page (call-for-pricing model)")

        return result

Scrape Runs (3)

Run #1035 Details

Status
exported
Parser Used
Facility009218Parser
Platform Detected
storageunitsoftware
Units Found
6
Stage Reached
exported
Timestamp
2026-03-23 02:40:13.147663
Timing
Stage Duration
Fetch3059ms
Detect199ms
Parse37ms
Export5ms

Snapshot: 009218_20260323T024016Z.html · Show Snapshot · Open in New Tab

Parsed Units (6)

5 x 10

No price

10 x 10

No price

10 x 15

No price

10 x 20

No price

10 x 25

No price

10 x 30

No price

← Back to dashboard