Facility: 109362

Self-Storage at U-Haul

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
109362
Name
Self-Storage at U-Haul
URL
https://www.uhaul.com/Locations/Self-Storage-near-Biloxi-MS-39532/748074/
Address
12011 Old Highway 67, Biloxi, MS 39532, USA, Biloxi, Mississippi 39532
Platform
custom_facility_109362
Parser File
src/parsers/custom/facility_109362_parser.py
Last Scraped
2026-03-27 14:08:59.014959
Created
2026-03-14 16:21:53.706708
Updated
2026-03-27 14:08:59.048573
Parser & Healing Diagnosis working
Parser Status
✓ Working
Status Reason
N/A
Last Healing Attempt
Not attempted
Parser Source (src/parsers/custom/facility_109362_parser.py)
"""Parser for Self-Storage at U-Haul."""

from __future__ import annotations

import re

from bs4 import BeautifulSoup

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


class Facility109362Parser(BaseParser):
    """Extract storage units from Self-Storage at U-Haul."""

    platform = "custom_facility_109362"

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

        containers = soup.select("div.cell")

        for container in containers:
            unit = UnitResult()
            text = container.get_text(separator=" ", strip=True)

            # Extract size
            size_el = None
            size_text = size_el.get_text(strip=True) if size_el else None
            if not size_text:
                # Fallback: regex on full text
                m = re.search(r"(\d+\s*[\'\'\u2032]?\s*[xX\u00d7]\s*\d+\s*[\'\'\u2032]?)", text)
                if m:
                    size_text = m.group(1)
            if size_text:
                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}

            # Extract price
            price_el = None
            price_text = price_el.get_text(strip=True) if price_el else None
            if not price_text:
                # Fallback: regex on full text
                pm = re.search(r"\$(\d[\d,.]*)", text)
                if pm:
                    price_text = pm.group(0)
            if price_text:
                pm = re.search(r"\$(\d[\d,.]*)", price_text)
                if pm:
                    unit.price = self.normalize_price(pm.group(1))

            unit.description = text[:200]

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

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

        return result

Scrape Runs (7)

Run #2215 Details

Status
exported
Parser Used
Facility109362Parser
Platform Detected
storageunitsoftware
Units Found
62
Stage Reached
exported
Timestamp
2026-03-27 14:08:49.212804
Timing
Stage Duration
Fetch4450ms
Detect207ms
Parse83ms
Export25ms

Snapshot: 109362_20260327T140858Z.html · Show Snapshot · Open in New Tab

Parsed Units (62)

Unknown Size

$79.95/mo

5' x 5'

$0.00/mo

5' x 5'

$0.00/mo

5' x 5'

$79.95/mo

5' x 5'

No price

Unknown Size

$11.95/mo

Unknown Size

$11.95/mo

Unknown Size

$79.95/mo

Unknown Size

$79.95/mo

Unknown Size

$79.95/mo

Unknown Size

$79.95/mo

5' x 10'

$109.95/mo

5' x 10'

No price

Unknown Size

$109.95/mo

Unknown Size

$11.95/mo

Unknown Size

$11.95/mo

Unknown Size

$109.95/mo

Unknown Size

$109.95/mo

Unknown Size

$109.95/mo

Unknown Size

$109.95/mo

10' x 10'

$149.95/mo

10' x 10'

No price

Unknown Size

$149.95/mo

Unknown Size

$11.95/mo

Unknown Size

$11.95/mo

Unknown Size

$149.95/mo

Unknown Size

$149.95/mo

Unknown Size

$149.95/mo

Unknown Size

$149.95/mo

10' x 15'

$189.95/mo

10' x 15'

No price

Unknown Size

$189.95/mo

Unknown Size

$11.95/mo

Unknown Size

$11.95/mo

Unknown Size

$189.95/mo

Unknown Size

$189.95/mo

Unknown Size

$189.95/mo

Unknown Size

$189.95/mo

10' x 20'

$214.95/mo

10' x 20'

No price

Unknown Size

$214.95/mo

Unknown Size

$11.95/mo

Unknown Size

$11.95/mo

Unknown Size

$214.95/mo

Unknown Size

$214.95/mo

Unknown Size

$214.95/mo

Unknown Size

$214.95/mo

10' x 30'

$234.95/mo

10' x 30'

No price

Unknown Size

$234.95/mo

Unknown Size

$11.95/mo

Unknown Size

$11.95/mo

Unknown Size

$234.95/mo

Unknown Size

$234.95/mo

Unknown Size

$234.95/mo

Unknown Size

$234.95/mo

5' x 8'

No price

Unknown Size

$69.95/mo

8' x 5'

No price

Unknown Size

$69.95/mo

Unknown Size

$11.95/mo

Unknown Size

$11.95/mo

All Failures for this Facility (2)

fetch TimeoutException website timeout transient Run #2213 | 2026-03-27 14:08:49.183641

Message: timeout: Timed out receiving message from renderer: -0.002 (Session info: chrome=146.0.7680.164) Stacktrace: #0 0x55688f1ca87e <unknown> #1 0x55688eb881d2 <unknown> #2 0x55688eb731fc <unknown> #3 0x55688eb72fe9 <unknown> #4 0x55688eb715e6 <unknown> #5 0x55688eb71a96 <unknown> #6 0x55688eb800f7 <unknown> #7 0x55688eb9577d <unknown> #8 0x55688eb9b02b <unknown> #9 0x55688eb720a1 <unknown> #10 0x55688eb955bf <unknown> #11 0x55688ec1786a <unknown> #12 0x55688ebf7a03 <unknown> #13 0x55688ebc85d5 <unknown> #14 0x55688ebc91c1 <unknown> #15 0x55688f18eec0 <unknown> #16 0x55688f192188 <unknown> #17 0x55688f191c3a <unknown> #18 0x55688f1925f5 <unknown> #19 0x55688f17e8ab <unknown> #20 0x55688f192957 <unknown> #21 0x55688f1667e6 <unknown> #22 0x55688f1b7855 <unknown> #23 0x55688f1b7a4c <unknown> #24 0x55688f1c933a <unknown> #25 0x7f29968621f5 <unknown>

Stack trace
Traceback (most recent call last):
  File "/app/src/pipeline.py", line 361, in _process_facility
    fetch_result = fetch_page(driver, url, snapshot_mgr, facility_id, **fetch_kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/src/fetcher/fetcher.py", line 125, in fetch_page
    driver.get(url)
  File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 466, in get
    self.execute(Command.GET, {"url": url})
  File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 446, in execute
    self.error_handler.check_response(response)
  File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py", line 232, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: timeout: Timed out receiving message from renderer: -0.002
  (Session info: chrome=146.0.7680.164)
Stacktrace:
#0 0x55688f1ca87e <unknown>
#1 0x55688eb881d2 <unknown>
#2 0x55688eb731fc <unknown>
#3 0x55688eb72fe9 <unknown>
#4 0x55688eb715e6 <unknown>
#5 0x55688eb71a96 <unknown>
#6 0x55688eb800f7 <unknown>
#7 0x55688eb9577d <unknown>
#8 0x55688eb9b02b <unknown>
#9 0x55688eb720a1 <unknown>
#10 0x55688eb955bf <unknown>
#11 0x55688ec1786a <unknown>
#12 0x55688ebf7a03 <unknown>
#13 0x55688ebc85d5 <unknown>
#14 0x55688ebc91c1 <unknown>
#15 0x55688f18eec0 <unknown>
#16 0x55688f192188 <unknown>
#17 0x55688f191c3a <unknown>
#18 0x55688f1925f5 <unknown>
#19 0x55688f17e8ab <unknown>
#20 0x55688f192957 <unknown>
#21 0x55688f1667e6 <unknown>
#22 0x55688f1b7855 <unknown>
#23 0x55688f1b7a4c <unknown>
#24 0x55688f1c933a <unknown>
#25 0x7f29968621f5 <unknown>

fetch TimeoutException website timeout transient Run #2212 | 2026-03-27 14:08:47.865374

Message: timeout: Timed out receiving message from renderer: -0.002 (Session info: chrome=146.0.7680.164) Stacktrace: #0 0x5559f97db87e <unknown> #1 0x5559f91991d2 <unknown> #2 0x5559f91841fc <unknown> #3 0x5559f9183fe9 <unknown> #4 0x5559f91825e6 <unknown> #5 0x5559f9182a96 <unknown> #6 0x5559f91910f7 <unknown> #7 0x5559f91a677d <unknown> #8 0x5559f91ac02b <unknown> #9 0x5559f91830a1 <unknown> #10 0x5559f91a65bf <unknown> #11 0x5559f922886a <unknown> #12 0x5559f9208a03 <unknown> #13 0x5559f91d95d5 <unknown> #14 0x5559f91da1c1 <unknown> #15 0x5559f979fec0 <unknown> #16 0x5559f97a3188 <unknown> #17 0x5559f97a2c3a <unknown> #18 0x5559f97a35f5 <unknown> #19 0x5559f978f8ab <unknown> #20 0x5559f97a3957 <unknown> #21 0x5559f97777e6 <unknown> #22 0x5559f97c8855 <unknown> #23 0x5559f97c8a4c <unknown> #24 0x5559f97da33a <unknown> #25 0x7fd4474e11f5 <unknown>

Stack trace
Traceback (most recent call last):
  File "/app/src/pipeline.py", line 361, in _process_facility
    fetch_result = fetch_page(driver, url, snapshot_mgr, facility_id, **fetch_kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/src/fetcher/fetcher.py", line 125, in fetch_page
    driver.get(url)
  File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 466, in get
    self.execute(Command.GET, {"url": url})
  File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 446, in execute
    self.error_handler.check_response(response)
  File "/app/.venv/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py", line 232, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: timeout: Timed out receiving message from renderer: -0.002
  (Session info: chrome=146.0.7680.164)
Stacktrace:
#0 0x5559f97db87e <unknown>
#1 0x5559f91991d2 <unknown>
#2 0x5559f91841fc <unknown>
#3 0x5559f9183fe9 <unknown>
#4 0x5559f91825e6 <unknown>
#5 0x5559f9182a96 <unknown>
#6 0x5559f91910f7 <unknown>
#7 0x5559f91a677d <unknown>
#8 0x5559f91ac02b <unknown>
#9 0x5559f91830a1 <unknown>
#10 0x5559f91a65bf <unknown>
#11 0x5559f922886a <unknown>
#12 0x5559f9208a03 <unknown>
#13 0x5559f91d95d5 <unknown>
#14 0x5559f91da1c1 <unknown>
#15 0x5559f979fec0 <unknown>
#16 0x5559f97a3188 <unknown>
#17 0x5559f97a2c3a <unknown>
#18 0x5559f97a35f5 <unknown>
#19 0x5559f978f8ab <unknown>
#20 0x5559f97a3957 <unknown>
#21 0x5559f97777e6 <unknown>
#22 0x5559f97c8855 <unknown>
#23 0x5559f97c8a4c <unknown>
#24 0x5559f97da33a <unknown>
#25 0x7fd4474e11f5 <unknown>

← Back to dashboard