We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Samsonite spider finds dealers, not official stores
This spider is wrong, e.g., the stores in Norway are not official Samsonite stores but dealers carrying the Samsonite brand

E.g., this is Chillout Travel Store, not a Samsonite store
https://www.alltheplaces.xyz/map/#15.79/59.920398/10.757257

The website does list official stores and dealers separately, so it should be possible to import the right type?
https://www.samsonite.no/samsonite-store/?search=dealer&city=&country=no&lat=59.920469259204786&lng=10.755597088646583&radius=20

_Originally posted by @eisams in https://github.com/alltheplaces/alltheplaces/issues/4385#issuecomment-1586255246_
            

--- 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/samsonite_eu.py`
Content:
```
1 import scrapy
2 import xmltodict
3 
4 from locations.dict_parser import DictParser
5 
6 
7 class SamsoniteEuSpider(scrapy.Spider):
8     name = "samsonite_eu"
9     item_attributes = {
10         "brand": "Samsonite",
11         "brand_wikidata": "Q1203426",
12     }
13     allowed_domains = ["samsonite.com"]
14 
15     def start_requests(self):
16         country_eu = [
17             "AL",
18             "CZ",
19             "DE",
20             "DK",
21             "CY",
22             "AT",
23             "BE",
24             "BG",
25             "CH",
26             "EE",
27             "EL",
28             "ES",
29             "FI",
30             "FR",
31             "HR",
32             "HU",
33             "IE",
34             "IS",
35             "IT",
36             "LT",
37             "LU",
38             "NL",
39             "NO",
40             "LV",
41             "ME",
42             "MT",
43             "MK",
44             "LI",
45             "PL",
46             "SI",
47             "SK",
48             "TR",
49             "UK",
50             "RS",
51             "SE",
52             "PT",
53             "RO",
54         ]
55         template = "https://storelocator.samsonite.eu/data-exchange/getDealerLocatorMapV2_Radius.aspx?s=sams&country={}&search=dealer&lat=48.85799300000001&lng=2.381153&radius=100000"
56         for country in country_eu:
57             yield scrapy.Request(url=template.format(country), callback=self.parse)
58 
59     def parse(self, response):
60         data = xmltodict.parse(response.text)
61         if data.get("dealers"):
62             stores = data.get("dealers", {}).get("dealer")
63             stores = stores if type(stores) == list else [stores]
64             for store in stores:
65                 item = DictParser.parse(store)
66                 item["ref"] = store.get("fld_Deal_Id")
67                 item["street_address"] = store.get("fld_Deal_Address1")
68                 item["city"] = store.get("fld_Deal_City1")
69                 item["postcode"] = store.get("fld_Deal_Zip")
70                 item["country"] = store.get("fld_Coun_Name")
71                 item["phone"] = store.get("fld_Deal_Phone")
72                 item["email"] = store.get("fld_Deal_Email")
73 
74                 yield item
75
```
--- 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/samsonite_eu.py b/locations/spiders/samsonite_eu.py
--- a/locations/spiders/samsonite_eu.py
+++ b/locations/spiders/samsonite_eu.py
@@ -1,15 +1,13 @@
 import scrapy
 import xmltodict
 
-from locations.dict_parser import DictParser
+from locations.items import Feature, add_social_media
 
 
 class SamsoniteEuSpider(scrapy.Spider):
     name = "samsonite_eu"
-    item_attributes = {
-        "brand": "Samsonite",
-        "brand_wikidata": "Q1203426",
-    }
+    CHIC_ACCENT = {"brand": "Chic Accent"}
+    SAMSONITE = {"brand": "Samsonite", "brand_wikidata": "Q1203426"}
     allowed_domains = ["samsonite.com"]
 
     def start_requests(self):
@@ -51,6 +49,7 @@
             "SE",
             "PT",
             "RO",
+            "GB",
         ]
         template = "https://storelocator.samsonite.eu/data-exchange/getDealerLocatorMapV2_Radius.aspx?s=sams&country={}&search=dealer&lat=48.85799300000001&lng=2.381153&radius=100000"
         for country in country_eu:
@@ -62,13 +61,31 @@
             stores = data.get("dealers", {}).get("dealer")
             stores = stores if type(stores) == list else [stores]
             for store in stores:
-                item = DictParser.parse(store)
+                if store["fld_Deal_DeCl_ID"] != "9":
+                    continue
+                item = Feature()
+                item["lat"] = store["Latitude"]
+                item["lon"] = store["Longitude"]
                 item["ref"] = store.get("fld_Deal_Id")
                 item["street_address"] = store.get("fld_Deal_Address1")
                 item["city"] = store.get("fld_Deal_City1")
                 item["postcode"] = store.get("fld_Deal_Zip")
                 item["country"] = store.get("fld_Coun_Name")
-                item["phone"] = store.get("fld_Deal_Phone")
-                item["email"] = store.get("fld_Deal_Email")
+                item["email"] = store.get("fld_Deal_Email") or ""
+                item["website"] = store["fld_Deal_DetailPageUrl"]
+
+                if "chicaccent.com" in item["email"]:
+                    item.update(self.CHIC_ACCENT)
+                else:
+                    item.update(self.SAMSONITE)
+
+                if phone := store.get("fld_Deal_Phone"):
+                    phone = store["fld_Deal_Prefix"] + phone.lower()
+
+                    if "whatsapp" in phone:
+                        phone, whats_app = phone.split("whatsapp")
+                        add_social_media(item, "WhatsApp", whats_app.strip(" :"))
+
+                    item["phone"] = phone
 
                 yield item

{"golden_diff": "diff --git a/locations/spiders/samsonite_eu.py b/locations/spiders/samsonite_eu.py\n--- a/locations/spiders/samsonite_eu.py\n+++ b/locations/spiders/samsonite_eu.py\n@@ -1,15 +1,13 @@\n import scrapy\n import xmltodict\n \n-from locations.dict_parser import DictParser\n+from locations.items import Feature, add_social_media\n \n \n class SamsoniteEuSpider(scrapy.Spider):\n     name = \"samsonite_eu\"\n-    item_attributes = {\n-        \"brand\": \"Samsonite\",\n-        \"brand_wikidata\": \"Q1203426\",\n-    }\n+    CHIC_ACCENT = {\"brand\": \"Chic Accent\"}\n+    SAMSONITE = {\"brand\": \"Samsonite\", \"brand_wikidata\": \"Q1203426\"}\n     allowed_domains = [\"samsonite.com\"]\n \n     def start_requests(self):\n@@ -51,6 +49,7 @@\n             \"SE\",\n             \"PT\",\n             \"RO\",\n+            \"GB\",\n         ]\n         template = \"https://storelocator.samsonite.eu/data-exchange/getDealerLocatorMapV2_Radius.aspx?s=sams&country={}&search=dealer&lat=48.85799300000001&lng=2.381153&radius=100000\"\n         for country in country_eu:\n@@ -62,13 +61,31 @@\n             stores = data.get(\"dealers\", {}).get(\"dealer\")\n             stores = stores if type(stores) == list else [stores]\n             for store in stores:\n-                item = DictParser.parse(store)\n+                if store[\"fld_Deal_DeCl_ID\"] != \"9\":\n+                    continue\n+                item = Feature()\n+                item[\"lat\"] = store[\"Latitude\"]\n+                item[\"lon\"] = store[\"Longitude\"]\n                 item[\"ref\"] = store.get(\"fld_Deal_Id\")\n                 item[\"street_address\"] = store.get(\"fld_Deal_Address1\")\n                 item[\"city\"] = store.get(\"fld_Deal_City1\")\n                 item[\"postcode\"] = store.get(\"fld_Deal_Zip\")\n                 item[\"country\"] = store.get(\"fld_Coun_Name\")\n-                item[\"phone\"] = store.get(\"fld_Deal_Phone\")\n-                item[\"email\"] = store.get(\"fld_Deal_Email\")\n+                item[\"email\"] = store.get(\"fld_Deal_Email\") or \"\"\n+                item[\"website\"] = store[\"fld_Deal_DetailPageUrl\"]\n+\n+                if \"chicaccent.com\" in item[\"email\"]:\n+                    item.update(self.CHIC_ACCENT)\n+                else:\n+                    item.update(self.SAMSONITE)\n+\n+                if phone := store.get(\"fld_Deal_Phone\"):\n+                    phone = store[\"fld_Deal_Prefix\"] + phone.lower()\n+\n+                    if \"whatsapp\" in phone:\n+                        phone, whats_app = phone.split(\"whatsapp\")\n+                        add_social_media(item, \"WhatsApp\", whats_app.strip(\" :\"))\n+\n+                    item[\"phone\"] = phone\n \n                 yield item\n", "issue": "Samsonite spider finds dealers, not official stores\nThis spider is wrong, e.g., the stores in Norway are not official Samsonite stores but dealers carrying the Samsonite brand\r\n\r\nE.g., this is Chillout Travel Store, not a Samsonite store\r\nhttps://www.alltheplaces.xyz/map/#15.79/59.920398/10.757257\r\n\r\nThe website does list official stores and dealers separately, so it should be possible to import the right type?\r\nhttps://www.samsonite.no/samsonite-store/?search=dealer&city=&country=no&lat=59.920469259204786&lng=10.755597088646583&radius=20\r\n\r\n_Originally posted by @eisams in https://github.com/alltheplaces/alltheplaces/issues/4385#issuecomment-1586255246_\r\n            \n", "before_files": [{"content": "import scrapy\nimport xmltodict\n\nfrom locations.dict_parser import DictParser\n\n\nclass SamsoniteEuSpider(scrapy.Spider):\n    name = \"samsonite_eu\"\n    item_attributes = {\n        \"brand\": \"Samsonite\",\n        \"brand_wikidata\": \"Q1203426\",\n    }\n    allowed_domains = [\"samsonite.com\"]\n\n    def start_requests(self):\n        country_eu = [\n            \"AL\",\n            \"CZ\",\n            \"DE\",\n            \"DK\",\n            \"CY\",\n            \"AT\",\n            \"BE\",\n            \"BG\",\n            \"CH\",\n            \"EE\",\n            \"EL\",\n            \"ES\",\n            \"FI\",\n            \"FR\",\n            \"HR\",\n            \"HU\",\n            \"IE\",\n            \"IS\",\n            \"IT\",\n            \"LT\",\n            \"LU\",\n            \"NL\",\n            \"NO\",\n            \"LV\",\n            \"ME\",\n            \"MT\",\n            \"MK\",\n            \"LI\",\n            \"PL\",\n            \"SI\",\n            \"SK\",\n            \"TR\",\n            \"UK\",\n            \"RS\",\n            \"SE\",\n            \"PT\",\n            \"RO\",\n        ]\n        template = \"https://storelocator.samsonite.eu/data-exchange/getDealerLocatorMapV2_Radius.aspx?s=sams&country={}&search=dealer&lat=48.85799300000001&lng=2.381153&radius=100000\"\n        for country in country_eu:\n            yield scrapy.Request(url=template.format(country), callback=self.parse)\n\n    def parse(self, response):\n        data = xmltodict.parse(response.text)\n        if data.get(\"dealers\"):\n            stores = data.get(\"dealers\", {}).get(\"dealer\")\n            stores = stores if type(stores) == list else [stores]\n            for store in stores:\n                item = DictParser.parse(store)\n                item[\"ref\"] = store.get(\"fld_Deal_Id\")\n                item[\"street_address\"] = store.get(\"fld_Deal_Address1\")\n                item[\"city\"] = store.get(\"fld_Deal_City1\")\n                item[\"postcode\"] = store.get(\"fld_Deal_Zip\")\n                item[\"country\"] = store.get(\"fld_Coun_Name\")\n                item[\"phone\"] = store.get(\"fld_Deal_Phone\")\n                item[\"email\"] = store.get(\"fld_Deal_Email\")\n\n                yield item\n", "path": "locations/spiders/samsonite_eu.py"}], "after_files": [{"content": "import scrapy\nimport xmltodict\n\nfrom locations.items import Feature, add_social_media\n\n\nclass SamsoniteEuSpider(scrapy.Spider):\n    name = \"samsonite_eu\"\n    CHIC_ACCENT = {\"brand\": \"Chic Accent\"}\n    SAMSONITE = {\"brand\": \"Samsonite\", \"brand_wikidata\": \"Q1203426\"}\n    allowed_domains = [\"samsonite.com\"]\n\n    def start_requests(self):\n        country_eu = [\n            \"AL\",\n            \"CZ\",\n            \"DE\",\n            \"DK\",\n            \"CY\",\n            \"AT\",\n            \"BE\",\n            \"BG\",\n            \"CH\",\n            \"EE\",\n            \"EL\",\n            \"ES\",\n            \"FI\",\n            \"FR\",\n            \"HR\",\n            \"HU\",\n            \"IE\",\n            \"IS\",\n            \"IT\",\n            \"LT\",\n            \"LU\",\n            \"NL\",\n            \"NO\",\n            \"LV\",\n            \"ME\",\n            \"MT\",\n            \"MK\",\n            \"LI\",\n            \"PL\",\n            \"SI\",\n            \"SK\",\n            \"TR\",\n            \"UK\",\n            \"RS\",\n            \"SE\",\n            \"PT\",\n            \"RO\",\n            \"GB\",\n        ]\n        template = \"https://storelocator.samsonite.eu/data-exchange/getDealerLocatorMapV2_Radius.aspx?s=sams&country={}&search=dealer&lat=48.85799300000001&lng=2.381153&radius=100000\"\n        for country in country_eu:\n            yield scrapy.Request(url=template.format(country), callback=self.parse)\n\n    def parse(self, response):\n        data = xmltodict.parse(response.text)\n        if data.get(\"dealers\"):\n            stores = data.get(\"dealers\", {}).get(\"dealer\")\n            stores = stores if type(stores) == list else [stores]\n            for store in stores:\n                if store[\"fld_Deal_DeCl_ID\"] != \"9\":\n                    continue\n                item = Feature()\n                item[\"lat\"] = store[\"Latitude\"]\n                item[\"lon\"] = store[\"Longitude\"]\n                item[\"ref\"] = store.get(\"fld_Deal_Id\")\n                item[\"street_address\"] = store.get(\"fld_Deal_Address1\")\n                item[\"city\"] = store.get(\"fld_Deal_City1\")\n                item[\"postcode\"] = store.get(\"fld_Deal_Zip\")\n                item[\"country\"] = store.get(\"fld_Coun_Name\")\n                item[\"email\"] = store.get(\"fld_Deal_Email\") or \"\"\n                item[\"website\"] = store[\"fld_Deal_DetailPageUrl\"]\n\n                if \"chicaccent.com\" in item[\"email\"]:\n                    item.update(self.CHIC_ACCENT)\n                else:\n                    item.update(self.SAMSONITE)\n\n                if phone := store.get(\"fld_Deal_Phone\"):\n                    phone = store[\"fld_Deal_Prefix\"] + phone.lower()\n\n                    if \"whatsapp\" in phone:\n                        phone, whats_app = phone.split(\"whatsapp\")\n                        add_social_media(item, \"WhatsApp\", whats_app.strip(\" :\"))\n\n                    item[\"phone\"] = phone\n\n                yield item\n", "path": "locations/spiders/samsonite_eu.py"}]}