Facility: 014818
Casper Mini Storage WY
- Facility ID
- 014818
- Name
- Casper Mini Storage WY
- URL
- https://www.casperministoragewy.com/1989-oil-dr-casper-wy-82604-1510
- Address
- N/A
- Platform
- custom_facility_014818
- Parser File
- src/parsers/custom/facility_014818_parser.py
- Last Scraped
- 2026-03-23 03:17:53.877789
- Created
- 2026-03-06 23:45:35.865957
- Updated
- 2026-03-23 03:17:53.883200
- Parser Status
- ✓ Working
- Status Reason
- N/A
- Last Healing Attempt
- Not attempted
Parser Source (src/parsers/custom/facility_014818_parser.py)
"""Parser for Casper Mini Storage (Casper, WY).
This site uses the StorEdge/storageunitsoftware platform but with obfuscated
CSS class names that don't match the standard selectors. Units are listed in
a standard HTML table with columns for Size, Unit Details, and Price.
"""
from __future__ import annotations
from bs4 import BeautifulSoup
from src.parsers.base import BaseParser, ParseResult, UnitResult
class Facility014818Parser(BaseParser):
"""Extract storage units from Casper Mini Storage.
The page renders a table with obfuscated class names. Rows are parsed by
positional column order: Size (col 0), Unit Details (col 1), Price (col 2).
"""
platform = "custom_facility_014818"
# CSS class for the size text element inside the first column
_SIZE_CLASS = "_2MVARJZtZDaHzpMVh0UAfo"
# CSS class for the price element inside the third column
_PRICE_CLASS = "_3V2N9w-4bQvYJ9lUWBSkHt"
# CSS class for the unit details cell (second column)
_DETAILS_CLASS = "_3EinRJ2x40cEGL2u1cR9Qc"
# CSS class for the units table
_TABLE_CLASS = "_2QREMkZenGaFOjxHn8CDhU"
def parse(self, html: str, url: str = "") -> ParseResult:
soup = BeautifulSoup(html, "lxml")
result = ParseResult(platform=self.platform, parser_name=self.__class__.__name__)
table = soup.find("table", class_=self._TABLE_CLASS)
if not table:
result.warnings.append("Unit table not found on page")
return result
tbody = table.find("tbody")
if not tbody:
result.warnings.append("Table body not found")
return result
rows = tbody.find_all("tr")
for row in rows:
unit = UnitResult()
# Extract size
size_el = row.find("div", 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}
# Extract price
price_el = row.find("div", class_=self._PRICE_CLASS)
if price_el:
unit.price = self.normalize_price(price_el.get_text(strip=True))
# Extract unit details / description
details_el = row.find("td", class_=self._DETAILS_CLASS)
if details_el:
unit.description = details_el.get_text(strip=True, separator=" ").strip()
if unit.size or unit.price:
result.units.append(unit)
if not result.units:
result.warnings.append("No units found on page")
return result
Scrape Runs (5)
-
exported Run #14622026-03-23 03:17:49.763310 | 9 units | Facility014818Parser | View Data →
-
exported Run #9692026-03-21 19:10:45.984192 | 9 units | Facility014818Parser | View Data →
-
exported Run #5222026-03-14 16:53:30.217199 | 9 units | Facility014818Parser | View Data →
-
exported Run #1212026-03-14 01:05:02.417518 | 9 units | Facility014818Parser | View Data →
-
exported Run #402026-03-13 19:10:23.244940 | StorageUnitSoftwareParser
Run #1462 Details
- Status
- exported
- Parser Used
- Facility014818Parser
- Platform Detected
- storageunitsoftware
- Units Found
- 9
- Stage Reached
- exported
- Timestamp
- 2026-03-23 03:17:49.763310
Timing
| Stage | Duration |
|---|---|
| Fetch | 3998ms |
| Detect | 65ms |
| Parse | 28ms |
| Export | 4ms |
Snapshot: 014818_20260323T031753Z.html · Show Snapshot · Open in New Tab
Parsed Units (9)
5'x10'
$55.00/mo
10'x10'
$70.00/mo
10'x10'
$70.00/mo
10'x15'
$90.00/mo
10'x20'
$110.00/mo
10'x20'
$110.00/mo
10'x25'
$45.00/mo
10'x30'
$160.00/mo
12'x40'
$45.00/mo
All Failures for this Facility (1)
parse
_WarningAsException
scraper
no_units_extracted
warning
Run #N/A | 2026-03-13 19:10:26.621252
No units extracted for 014818
Stack trace
src.reporting.failure_reporter._WarningAsException: No units extracted for 014818