We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Dunelm spider output is missing 41 branches (dunelm_gb)
The Dunelm spider dunelm_gb is consistently returning 138 branches for the last few weeks. However, Dunelm's own online store-finder at https://www.dunelm.com/stores/a-z lists 179 branches. All of the 138 are included in the 179, meaning the spider is missing 41.

For example, the following branches appear on Dunelm's website, but aren't returned by the spider:
- https://www.dunelm.com/stores/altrincham
- https://www.dunelm.com/stores/basildon
- https://www.dunelm.com/stores/beckton
- https://www.dunelm.com/stores/beverley

I'm afraid I can't figure out how to manually replicate the spider's request, to check whether the missing branches are missing from the API return, or are just not being picked up by the spider for some reason.

I don't know if there's any connection between the missing stores. The Basildon one only opened recently in April 2022 ([source](https://www.echo-news.co.uk/news/20100489.dunelm-opens-mayflower-retail-park-basildon/)) but the Altrincham store has been around since 2017 ([source](https://www.messengernewspapers.co.uk/news/whereyoulive/15122706.customers-attend-opening-of-dunelms-new-altrincham-store/)). I've checked a few of the missing branches and found facebook supprt groupswith recent posts, suggesting that the stores are indeed still open.

If the API isn't returning all the stores, then perhaps the online list at https://www.dunelm.com/stores/a-z could be used by the spider instead, or maybe https://www.dunelm.com/sitemap/static-sitemap.xml (which also seems to include all 179).

--- 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/dunelm_gb.py`
Content:
```
1 from scrapy.http import JsonRequest
2 from scrapy.spiders import Spider
3 
4 from locations.dict_parser import DictParser
5 from locations.hours import OpeningHours
6 
7 
8 class DunelmGB(Spider):
9     name = "dunelm_gb"
10     item_attributes = {"brand": "Dunelm", "brand_wikidata": "Q5315020"}
11 
12     def start_requests(self):
13         yield JsonRequest(
14             url="https://fy8plebn34-dsn.algolia.net/1/indexes/*/queries?x-algolia-application-id=FY8PLEBN34&x-algolia-api-key=ae9bc9ca475f6c3d7579016da0305a33",
15             data={
16                 "requests": [
17                     {
18                         "indexName": "stores_prod",
19                         "params": "hitsPerPage=300",
20                     }
21                 ]
22             },
23         )
24 
25     def parse(self, response, **kwargs):
26         for store in response.json()["results"][0]["hits"]:
27             store["location"] = store["_geoloc"]
28 
29             item = DictParser.parse(store)
30 
31             item["ref"] = store["sapStoreId"]
32             item["website"] = "https://www.dunelm.com/stores/" + store["uri"]
33 
34             oh = OpeningHours()
35             for rule in store["openingHours"]:
36                 oh.add_range(rule["day"], rule["open"], rule["close"])
37 
38             item["opening_hours"] = oh.as_opening_hours()
39 
40             item["email"] = store["email"]
41             item["extras"] = {"storeType": store.get("storeType")}
42 
43             yield item
44
```
--- 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/dunelm_gb.py b/locations/spiders/dunelm_gb.py
--- a/locations/spiders/dunelm_gb.py
+++ b/locations/spiders/dunelm_gb.py
@@ -37,7 +37,6 @@
 
             item["opening_hours"] = oh.as_opening_hours()
 
-            item["email"] = store["email"]
             item["extras"] = {"storeType": store.get("storeType")}
 
             yield item

{"golden_diff": "diff --git a/locations/spiders/dunelm_gb.py b/locations/spiders/dunelm_gb.py\n--- a/locations/spiders/dunelm_gb.py\n+++ b/locations/spiders/dunelm_gb.py\n@@ -37,7 +37,6 @@\n \n             item[\"opening_hours\"] = oh.as_opening_hours()\n \n-            item[\"email\"] = store[\"email\"]\n             item[\"extras\"] = {\"storeType\": store.get(\"storeType\")}\n \n             yield item\n", "issue": "Dunelm spider output is missing 41 branches (dunelm_gb)\nThe Dunelm spider dunelm_gb is consistently returning 138 branches for the last few weeks. However, Dunelm's own online store-finder at https://www.dunelm.com/stores/a-z lists 179 branches. All of the 138 are included in the 179, meaning the spider is missing 41.\r\n\r\nFor example, the following branches appear on Dunelm's website, but aren't returned by the spider:\r\n- https://www.dunelm.com/stores/altrincham\r\n- https://www.dunelm.com/stores/basildon\r\n- https://www.dunelm.com/stores/beckton\r\n- https://www.dunelm.com/stores/beverley\r\n\r\nI'm afraid I can't figure out how to manually replicate the spider's request, to check whether the missing branches are missing from the API return, or are just not being picked up by the spider for some reason.\r\n\r\nI don't know if there's any connection between the missing stores. The Basildon one only opened recently in April 2022 ([source](https://www.echo-news.co.uk/news/20100489.dunelm-opens-mayflower-retail-park-basildon/)) but the Altrincham store has been around since 2017 ([source](https://www.messengernewspapers.co.uk/news/whereyoulive/15122706.customers-attend-opening-of-dunelms-new-altrincham-store/)). I've checked a few of the missing branches and found facebook supprt groupswith recent posts, suggesting that the stores are indeed still open.\r\n\r\nIf the API isn't returning all the stores, then perhaps the online list at https://www.dunelm.com/stores/a-z could be used by the spider instead, or maybe https://www.dunelm.com/sitemap/static-sitemap.xml (which also seems to include all 179).\n", "before_files": [{"content": "from scrapy.http import JsonRequest\nfrom scrapy.spiders import Spider\n\nfrom locations.dict_parser import DictParser\nfrom locations.hours import OpeningHours\n\n\nclass DunelmGB(Spider):\n    name = \"dunelm_gb\"\n    item_attributes = {\"brand\": \"Dunelm\", \"brand_wikidata\": \"Q5315020\"}\n\n    def start_requests(self):\n        yield JsonRequest(\n            url=\"https://fy8plebn34-dsn.algolia.net/1/indexes/*/queries?x-algolia-application-id=FY8PLEBN34&x-algolia-api-key=ae9bc9ca475f6c3d7579016da0305a33\",\n            data={\n                \"requests\": [\n                    {\n                        \"indexName\": \"stores_prod\",\n                        \"params\": \"hitsPerPage=300\",\n                    }\n                ]\n            },\n        )\n\n    def parse(self, response, **kwargs):\n        for store in response.json()[\"results\"][0][\"hits\"]:\n            store[\"location\"] = store[\"_geoloc\"]\n\n            item = DictParser.parse(store)\n\n            item[\"ref\"] = store[\"sapStoreId\"]\n            item[\"website\"] = \"https://www.dunelm.com/stores/\" + store[\"uri\"]\n\n            oh = OpeningHours()\n            for rule in store[\"openingHours\"]:\n                oh.add_range(rule[\"day\"], rule[\"open\"], rule[\"close\"])\n\n            item[\"opening_hours\"] = oh.as_opening_hours()\n\n            item[\"email\"] = store[\"email\"]\n            item[\"extras\"] = {\"storeType\": store.get(\"storeType\")}\n\n            yield item\n", "path": "locations/spiders/dunelm_gb.py"}], "after_files": [{"content": "from scrapy.http import JsonRequest\nfrom scrapy.spiders import Spider\n\nfrom locations.dict_parser import DictParser\nfrom locations.hours import OpeningHours\n\n\nclass DunelmGB(Spider):\n    name = \"dunelm_gb\"\n    item_attributes = {\"brand\": \"Dunelm\", \"brand_wikidata\": \"Q5315020\"}\n\n    def start_requests(self):\n        yield JsonRequest(\n            url=\"https://fy8plebn34-dsn.algolia.net/1/indexes/*/queries?x-algolia-application-id=FY8PLEBN34&x-algolia-api-key=ae9bc9ca475f6c3d7579016da0305a33\",\n            data={\n                \"requests\": [\n                    {\n                        \"indexName\": \"stores_prod\",\n                        \"params\": \"hitsPerPage=300\",\n                    }\n                ]\n            },\n        )\n\n    def parse(self, response, **kwargs):\n        for store in response.json()[\"results\"][0][\"hits\"]:\n            store[\"location\"] = store[\"_geoloc\"]\n\n            item = DictParser.parse(store)\n\n            item[\"ref\"] = store[\"sapStoreId\"]\n            item[\"website\"] = \"https://www.dunelm.com/stores/\" + store[\"uri\"]\n\n            oh = OpeningHours()\n            for rule in store[\"openingHours\"]:\n                oh.add_range(rule[\"day\"], rule[\"open\"], rule[\"close\"])\n\n            item[\"opening_hours\"] = oh.as_opening_hours()\n\n            item[\"extras\"] = {\"storeType\": store.get(\"storeType\")}\n\n            yield item\n", "path": "locations/spiders/dunelm_gb.py"}]}