We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Spider ingles is broken
During the global build at 2021-07-07-14-42-19, spider **ingles** failed with **0 features** and **189 errors**.

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

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `locations/spiders/ingles.py`
Content:
```
1 # -*- coding: utf-8
2 import scrapy
3 import re
4 
5 from locations.items import GeojsonPointItem
6 from locations.hours import OpeningHours
7 
8 URL = 'https://www.ingles-markets.com/storelocate/storelocator.php?address='
9 
10 STORE_STATES = ["Alabama", "Georgia", "North%20Carolina", "South%20Carolina", "Tennessee", "Virginia"]
11 
12 DAYS = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"]
13 
14 class ingles(scrapy.Spider):
15     name = "ingles"
16     item_attributes = { 'brand': "Ingles" }
17     allowed_domains = ["www.ingles-markets.com"]
18 
19     def start_requests(self):
20         for state in STORE_STATES:
21             yield scrapy.Request(URL + state, callback=self.parse)
22 
23     def parse_hours(self, hours):
24         opening_hours = OpeningHours()
25 
26         for day in DAYS:
27             open_time, close_time = hours.split('to')
28             opening_hours.add_range(day=day, open_time=("".join(open_time).strip()), close_time=("".join(close_time).strip()), time_format="%H:%M%p")
29 
30         return opening_hours.as_opening_hours()
31 
32     def parse_store(self, response):
33 
34         properties = {
35             'ref': response.meta["ref"],
36             'name': response.meta["name"],
37             'addr_full': response.meta["addr_full"],
38             'city': response.meta["city"],
39             'state': response.meta["state"],
40             'postcode': re.search(r'(\d{5})',response.xpath("/html/body/fieldset/div[2]/span[2]/strong/text()").get()).group(),
41             'phone': response.xpath("/html/body/fieldset/div[2]/a/text()").get(),
42             'lat': response.meta["lat"],
43             'lon': response.meta["lon"],
44             'website': response.url,
45         }
46 
47         hours = self.parse_hours(" ".join(response.xpath("/html/body/fieldset/div[2]/text()")[2].getall()).strip())
48         if hours:
49             properties["opening_hours"] = hours
50 
51         yield GeojsonPointItem(**properties)
52 
53     def parse(self, response):
54         for store in response.xpath('//markers/marker'):
55             ids =store.xpath('./@id').extract_first(),
56             name = store.xpath('./@name').get()
57             addr = store.xpath('./@address').get()
58             city = store.xpath('./@city').get()
59             state = store.xpath('./@state').get()
60             lats = store.xpath('./@lat').get()
61             longs = store.xpath('./@lng').get()
62 
63             for id in ids:
64                 yield scrapy.Request(
65                     'https://www.ingles-markets.com/storelocate/storeinfo.php?storenum=' + id,
66                     callback=self.parse_store,
67                     meta={
68                         'ref': id,
69                         'name': name,
70                         'addr_full': addr,
71                         'city': city,
72                         'state': state,
73                         'lat': lats,
74                         'lon': longs
75                     }
76                 )
77
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/locations/spiders/ingles.py b/locations/spiders/ingles.py
--- a/locations/spiders/ingles.py
+++ b/locations/spiders/ingles.py
@@ -37,14 +37,14 @@
             'addr_full': response.meta["addr_full"],
             'city': response.meta["city"],
             'state': response.meta["state"],
-            'postcode': re.search(r'(\d{5})',response.xpath("/html/body/fieldset/div[2]/span[2]/strong/text()").get()).group(),
+            'postcode': re.search(r'(\d{5})',response.xpath("/html/body/div[2]/span[2]/strong/text()").get()).group(),
             'phone': response.xpath("/html/body/fieldset/div[2]/a/text()").get(),
             'lat': response.meta["lat"],
             'lon': response.meta["lon"],
             'website': response.url,
         }
 
-        hours = self.parse_hours(" ".join(response.xpath("/html/body/fieldset/div[2]/text()")[2].getall()).strip())
+        hours = self.parse_hours(" ".join(response.xpath("/html/body/fieldset/div[2]/text()")[1].getall()).strip())
         if hours:
             properties["opening_hours"] = hours

{"golden_diff": "diff --git a/locations/spiders/ingles.py b/locations/spiders/ingles.py\n--- a/locations/spiders/ingles.py\n+++ b/locations/spiders/ingles.py\n@@ -37,14 +37,14 @@\n             'addr_full': response.meta[\"addr_full\"],\n             'city': response.meta[\"city\"],\n             'state': response.meta[\"state\"],\n-            'postcode': re.search(r'(\\d{5})',response.xpath(\"/html/body/fieldset/div[2]/span[2]/strong/text()\").get()).group(),\n+            'postcode': re.search(r'(\\d{5})',response.xpath(\"/html/body/div[2]/span[2]/strong/text()\").get()).group(),\n             'phone': response.xpath(\"/html/body/fieldset/div[2]/a/text()\").get(),\n             'lat': response.meta[\"lat\"],\n             'lon': response.meta[\"lon\"],\n             'website': response.url,\n         }\n \n-        hours = self.parse_hours(\" \".join(response.xpath(\"/html/body/fieldset/div[2]/text()\")[2].getall()).strip())\n+        hours = self.parse_hours(\" \".join(response.xpath(\"/html/body/fieldset/div[2]/text()\")[1].getall()).strip())\n         if hours:\n             properties[\"opening_hours\"] = hours\n", "issue": "Spider ingles is broken\nDuring the global build at 2021-07-07-14-42-19, spider **ingles** failed with **0 features** and **189 errors**.\n\nHere's [the log](https://data.alltheplaces.xyz/runs/2021-07-07-14-42-19/logs/ingles.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-07-07-14-42-19/output/ingles.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-07-07-14-42-19/output/ingles.geojson))\n", "before_files": [{"content": "# -*- coding: utf-8\nimport scrapy\nimport re\n\nfrom locations.items import GeojsonPointItem\nfrom locations.hours import OpeningHours\n\nURL = 'https://www.ingles-markets.com/storelocate/storelocator.php?address='\n\nSTORE_STATES = [\"Alabama\", \"Georgia\", \"North%20Carolina\", \"South%20Carolina\", \"Tennessee\", \"Virginia\"]\n\nDAYS = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"]\n\nclass ingles(scrapy.Spider):\n    name = \"ingles\"\n    item_attributes = { 'brand': \"Ingles\" }\n    allowed_domains = [\"www.ingles-markets.com\"]\n\n    def start_requests(self):\n        for state in STORE_STATES:\n            yield scrapy.Request(URL + state, callback=self.parse)\n\n    def parse_hours(self, hours):\n        opening_hours = OpeningHours()\n\n        for day in DAYS:\n            open_time, close_time = hours.split('to')\n            opening_hours.add_range(day=day, open_time=(\"\".join(open_time).strip()), close_time=(\"\".join(close_time).strip()), time_format=\"%H:%M%p\")\n\n        return opening_hours.as_opening_hours()\n\n    def parse_store(self, response):\n\n        properties = {\n            'ref': response.meta[\"ref\"],\n            'name': response.meta[\"name\"],\n            'addr_full': response.meta[\"addr_full\"],\n            'city': response.meta[\"city\"],\n            'state': response.meta[\"state\"],\n            'postcode': re.search(r'(\\d{5})',response.xpath(\"/html/body/fieldset/div[2]/span[2]/strong/text()\").get()).group(),\n            'phone': response.xpath(\"/html/body/fieldset/div[2]/a/text()\").get(),\n            'lat': response.meta[\"lat\"],\n            'lon': response.meta[\"lon\"],\n            'website': response.url,\n        }\n\n        hours = self.parse_hours(\" \".join(response.xpath(\"/html/body/fieldset/div[2]/text()\")[2].getall()).strip())\n        if hours:\n            properties[\"opening_hours\"] = hours\n\n        yield GeojsonPointItem(**properties)\n\n    def parse(self, response):\n        for store in response.xpath('//markers/marker'):\n            ids =store.xpath('./@id').extract_first(),\n            name = store.xpath('./@name').get()\n            addr = store.xpath('./@address').get()\n            city = store.xpath('./@city').get()\n            state = store.xpath('./@state').get()\n            lats = store.xpath('./@lat').get()\n            longs = store.xpath('./@lng').get()\n\n            for id in ids:\n                yield scrapy.Request(\n                    'https://www.ingles-markets.com/storelocate/storeinfo.php?storenum=' + id,\n                    callback=self.parse_store,\n                    meta={\n                        'ref': id,\n                        'name': name,\n                        'addr_full': addr,\n                        'city': city,\n                        'state': state,\n                        'lat': lats,\n                        'lon': longs\n                    }\n                )\n", "path": "locations/spiders/ingles.py"}], "after_files": [{"content": "# -*- coding: utf-8\nimport scrapy\nimport re\n\nfrom locations.items import GeojsonPointItem\nfrom locations.hours import OpeningHours\n\nURL = 'https://www.ingles-markets.com/storelocate/storelocator.php?address='\n\nSTORE_STATES = [\"Alabama\", \"Georgia\", \"North%20Carolina\", \"South%20Carolina\", \"Tennessee\", \"Virginia\"]\n\nDAYS = [\"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"]\n\nclass ingles(scrapy.Spider):\n    name = \"ingles\"\n    item_attributes = { 'brand': \"Ingles\" }\n    allowed_domains = [\"www.ingles-markets.com\"]\n\n    def start_requests(self):\n        for state in STORE_STATES:\n            yield scrapy.Request(URL + state, callback=self.parse)\n\n    def parse_hours(self, hours):\n        opening_hours = OpeningHours()\n\n        for day in DAYS:\n            open_time, close_time = hours.split('to')\n            opening_hours.add_range(day=day, open_time=(\"\".join(open_time).strip()), close_time=(\"\".join(close_time).strip()), time_format=\"%H:%M%p\")\n\n        return opening_hours.as_opening_hours()\n\n    def parse_store(self, response):\n\n        properties = {\n            'ref': response.meta[\"ref\"],\n            'name': response.meta[\"name\"],\n            'addr_full': response.meta[\"addr_full\"],\n            'city': response.meta[\"city\"],\n            'state': response.meta[\"state\"],\n            'postcode': re.search(r'(\\d{5})',response.xpath(\"/html/body/div[2]/span[2]/strong/text()\").get()).group(),\n            'phone': response.xpath(\"/html/body/fieldset/div[2]/a/text()\").get(),\n            'lat': response.meta[\"lat\"],\n            'lon': response.meta[\"lon\"],\n            'website': response.url,\n        }\n\n        hours = self.parse_hours(\" \".join(response.xpath(\"/html/body/fieldset/div[2]/text()\")[1].getall()).strip())\n        if hours:\n            properties[\"opening_hours\"] = hours\n\n        yield GeojsonPointItem(**properties)\n\n    def parse(self, response):\n        for store in response.xpath('//markers/marker'):\n            ids =store.xpath('./@id').extract_first(),\n            name = store.xpath('./@name').get()\n            addr = store.xpath('./@address').get()\n            city = store.xpath('./@city').get()\n            state = store.xpath('./@state').get()\n            lats = store.xpath('./@lat').get()\n            longs = store.xpath('./@lng').get()\n\n            for id in ids:\n                yield scrapy.Request(\n                    'https://www.ingles-markets.com/storelocate/storeinfo.php?storenum=' + id,\n                    callback=self.parse_store,\n                    meta={\n                        'ref': id,\n                        'name': name,\n                        'addr_full': addr,\n                        'city': city,\n                        'state': state,\n                        'lat': lats,\n                        'lon': longs\n                    }\n                )\n", "path": "locations/spiders/ingles.py"}]}