Repository: alltheplaces/alltheplaces

Issue:
Spider holiday_stationstores is broken
During the global build at 2021-08-18-14-42-26, spider **holiday_stationstores** failed with **552 features** and **10 errors**.

Here's [the log](https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/logs/holiday_stationstores.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/output/holiday_stationstores.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/output/holiday_stationstores.geojson))


Discussion:
During the global build at 2021-09-01-14-42-16, spider **holiday_stationstores** failed with **553 features** and **8 errors**.

Here's [the log](https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/logs/holiday_stationstores.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/output/holiday_stationstores.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/output/holiday_stationstores.geojson))
During the global build at 2021-10-13-14-42-23, spider **holiday_stationstores** failed with **555 features** and **7 errors**.

Here's [the log](https://data.alltheplaces.xyz/runs/2021-10-13-14-42-23/logs/holiday_stationstores.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-10-13-14-42-23/output/holiday_stationstores.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-10-13-14-42-23/output/holiday_stationstores.geojson))

Resolving patch:
diff --git a/locations/spiders/holiday_stationstores.py b/locations/spiders/holiday_stationstores.py
--- a/locations/spiders/holiday_stationstores.py
+++ b/locations/spiders/holiday_stationstores.py
@@ -31,6 +31,8 @@ def parse(self, response):
         store = response.meta['store']
 
         address = response.xpath('//div[@class="col-lg-4 col-sm-12"]/text()')[1].extract().strip()
+        city_state = response.xpath('//div[@class="col-lg-4 col-sm-12"]/text()')[2].extract().strip()
+        city, state = city_state.split(", ")
         phone = response.xpath('//div[@class="HolidayFontColorRed"]/text()').extract_first().strip()
         services = '|'.join(response.xpath('//ul[@style="list-style-type: none; padding-left: 1.0em; font-size: 12px;"]/li/text()').extract()).lower()
         open_24_hours = '24 hours' in response.css(
@@ -43,6 +45,9 @@ def parse(self, response):
             'addr_full': address,
             'phone': phone,
             'ref': store['ID'],
+            'city': city.strip(),
+            'state': state.strip(),
+            'website': response.url,
             'opening_hours': '24/7' if open_24_hours else self.opening_hours(response),
             'extras': {
                 'amenity:fuel': True,
@@ -68,7 +73,7 @@ def opening_hours(self, response):
                 day = hour_part_elem.xpath('.//div[@class="col-3"]/text()').extract_first()
                 hours = hour_part_elem.xpath('.//div[@class="col-9"]/text()').extract_first()
 
-                if not hours:
+                if not hours or hours.lower() == 'closed':
                     continue
 
                 day = day[:2]


Test patch: