Facility: 032773
First Security Self Storage
- 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 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)
-
exported Run #16572026-03-27 13:44:38.090665 | 11 units | Facility032773Parser | View Data →
-
exported Run #16562026-03-27 13:44:35.885094 | 11 units | Facility032773Parser | View Data →
-
exported Run #10902026-03-23 02:45:01.036709 | 11 units | Facility032773Parser | View Data →
-
exported Run #5962026-03-21 18:35:20.148249 | 11 units | Facility032773Parser | View Data →
Run #1657 Details
- Status
- exported
- Parser Used
- Facility032773Parser
- Platform Detected
- unknown
- Units Found
- 11
- Stage Reached
- exported
- Timestamp
- 2026-03-27 13:44:38.090665
Timing
| Stage | Duration |
|---|---|
| Fetch | 4516ms |
| Detect | 4ms |
| Parse | 3ms |
| Export | 18ms |
Snapshot: 032773_20260327T134442Z.html · Show Snapshot · Open in New Tab
Parsed Units (11)
59x50
No price
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