We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
@spider=western_union in Poland list `amenity=money_transfer` POIs not actually existing as separate objects
very similar to #5881

It would be better to drop main tag over showing it like this. And in this case it seems dubious to me is it mappable as all on https://www.openstreetmap.org/node/5873034793 bank note.

https://www.alltheplaces.xyz/map/#16.47/50.076332/20.032325

https://location.westernunion.com/pl/malopolskie/krakow/e6d7165e8f86df94dacd8de6f1bfc780

I can visit that place and check in which form Western Union appears there.
[WesternUnion] Remove top level tag
Fixes #5889
@spider=western_union in Poland list `amenity=money_transfer` POIs not actually existing as separate objects
very similar to #5881

It would be better to drop main tag over showing it like this. And in this case it seems dubious to me is it mappable as all on https://www.openstreetmap.org/node/5873034793 bank note.

https://www.alltheplaces.xyz/map/#16.47/50.076332/20.032325

https://location.westernunion.com/pl/malopolskie/krakow/e6d7165e8f86df94dacd8de6f1bfc780

I can visit that place and check in which form Western Union appears there.

--- 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/western_union.py`
Content:
```
1 import json
2 
3 from scrapy import Spider
4 from scrapy.downloadermiddlewares.retry import get_retry_request
5 from scrapy.http import JsonRequest
6 
7 from locations.categories import Categories
8 from locations.dict_parser import DictParser
9 from locations.geo import point_locations
10 from locations.hours import OpeningHours
11 
12 
13 class WesternUnionSpider(Spider):
14     name = "western_union"
15     item_attributes = {"brand": "Western Union", "brand_wikidata": "Q861042", "extras": Categories.MONEY_TRANSFER.value}
16     allowed_domains = ["www.westernunion.com"]
17     # start_urls[0] is a GraphQL endpoint.
18     start_urls = ["https://www.westernunion.com/router/"]
19     download_delay = 0.2
20 
21     def request_page(self, latitude, longitude, page_number):
22         # An access code for querying the GraphQL endpoint is
23         # required, This is constant across different browser
24         # sessions and the same for all users of the website.
25         headers = {
26             "x-wu-accesscode": "RtYV3XDz9EA",
27             "x-wu-operationName": "locations",
28         }
29         # The GraphQL query does not appear to allow for the page
30         # size to be increased. Typically the page size is observed
31         # by default to be 15 results per page.
32         #
33         # A radius of 350km is used by the API to search around each
34         # provided coordinate. There does not appear to be a way to
35         # specify an alternative radius.
36         data = {
37             "query": "query locations($req:LocationInput) { locations(input: $req) }",
38             "variables": {
39                 "req": {
40                     "longitude": longitude,
41                     "latitude": latitude,
42                     "country": "US",  # Seemingly has no effect.
43                     "openNow": "",
44                     "services": [],
45                     "sortOrder": "Distance",
46                     "pageNumber": str(page_number),
47                 }
48             },
49         }
50         yield JsonRequest(url=self.start_urls[0], method="POST", headers=headers, data=data)
51 
52     def start_requests(self):
53         # The GraphQL query searches for locations within a 350km
54         # radius of supplied coordinates, then returns locations in
55         # pages of 15 locations each page.
56         for lat, lon in point_locations("earth_centroids_iseadgg_346km_radius.csv"):
57             yield from self.request_page(lat, lon, 1)
58 
59     def parse(self, response):
60         # If crawling too fast, the server responds with a JSON
61         # blob containing an error message. Schedule a retry.
62         if "results" not in response.json()["data"]["locations"]:
63             if "errorCode" in response.json()["data"]["locations"]:
64                 if response.json()["data"]["locations"]["errorCode"] == 500:
65                     yield get_retry_request(
66                         response.request, spider=self, max_retry_times=5, reason="Retry after rate limiting error"
67                     )
68                     return
69             # In case of an unhandled error, skip parsing.
70             return
71 
72         # Parse the 15 (or fewer) locations from the response provided.
73         for location in response.json()["data"]["locations"]["results"]:
74             item = DictParser.parse(location)
75             item["website"] = "https://location.westernunion.com/" + location["detailsUrl"]
76             item["opening_hours"] = OpeningHours()
77             hours_string = " ".join([f"{day}: {hours}" for (day, hours) in location["detail.hours"].items()])
78             item["opening_hours"].add_ranges_from_string(hours_string)
79             yield item
80 
81         # On the first response per radius search of a coordinate,
82         # generate requests for all subsequent pages of results
83         # found by the API within the 350km search radius.
84         request_data = json.loads(response.request.body)
85         current_page = int(request_data["variables"]["req"]["pageNumber"])
86         total_pages = response.json()["data"]["locations"]["pageCount"]
87         if current_page == 1 and total_pages > 1:
88             for page_number in range(2, total_pages, 1):
89                 yield from self.request_page(
90                     request_data["variables"]["req"]["latitude"],
91                     request_data["variables"]["req"]["longitude"],
92                     page_number,
93                 )
94
```
--- 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/western_union.py b/locations/spiders/western_union.py
--- a/locations/spiders/western_union.py
+++ b/locations/spiders/western_union.py
@@ -4,7 +4,6 @@
 from scrapy.downloadermiddlewares.retry import get_retry_request
 from scrapy.http import JsonRequest
 
-from locations.categories import Categories
 from locations.dict_parser import DictParser
 from locations.geo import point_locations
 from locations.hours import OpeningHours
@@ -12,7 +11,11 @@
 
 class WesternUnionSpider(Spider):
     name = "western_union"
-    item_attributes = {"brand": "Western Union", "brand_wikidata": "Q861042", "extras": Categories.MONEY_TRANSFER.value}
+    item_attributes = {
+        "brand": "Western Union",
+        "brand_wikidata": "Q861042",
+        "extras": {"money_transfer": "western_union"},
+    }
     allowed_domains = ["www.westernunion.com"]
     # start_urls[0] is a GraphQL endpoint.
     start_urls = ["https://www.westernunion.com/router/"]

{"golden_diff": "diff --git a/locations/spiders/western_union.py b/locations/spiders/western_union.py\n--- a/locations/spiders/western_union.py\n+++ b/locations/spiders/western_union.py\n@@ -4,7 +4,6 @@\n from scrapy.downloadermiddlewares.retry import get_retry_request\n from scrapy.http import JsonRequest\n \n-from locations.categories import Categories\n from locations.dict_parser import DictParser\n from locations.geo import point_locations\n from locations.hours import OpeningHours\n@@ -12,7 +11,11 @@\n \n class WesternUnionSpider(Spider):\n     name = \"western_union\"\n-    item_attributes = {\"brand\": \"Western Union\", \"brand_wikidata\": \"Q861042\", \"extras\": Categories.MONEY_TRANSFER.value}\n+    item_attributes = {\n+        \"brand\": \"Western Union\",\n+        \"brand_wikidata\": \"Q861042\",\n+        \"extras\": {\"money_transfer\": \"western_union\"},\n+    }\n     allowed_domains = [\"www.westernunion.com\"]\n     # start_urls[0] is a GraphQL endpoint.\n     start_urls = [\"https://www.westernunion.com/router/\"]\n", "issue": "@spider=western_union in Poland list `amenity=money_transfer` POIs not actually existing as separate objects\nvery similar to #5881\r\n\r\nIt would be better to drop main tag over showing it like this. And in this case it seems dubious to me is it mappable as all on https://www.openstreetmap.org/node/5873034793 bank note.\r\n\r\nhttps://www.alltheplaces.xyz/map/#16.47/50.076332/20.032325\r\n\r\nhttps://location.westernunion.com/pl/malopolskie/krakow/e6d7165e8f86df94dacd8de6f1bfc780\r\n\r\nI can visit that place and check in which form Western Union appears there.\n[WesternUnion] Remove top level tag\nFixes #5889\n@spider=western_union in Poland list `amenity=money_transfer` POIs not actually existing as separate objects\nvery similar to #5881\r\n\r\nIt would be better to drop main tag over showing it like this. And in this case it seems dubious to me is it mappable as all on https://www.openstreetmap.org/node/5873034793 bank note.\r\n\r\nhttps://www.alltheplaces.xyz/map/#16.47/50.076332/20.032325\r\n\r\nhttps://location.westernunion.com/pl/malopolskie/krakow/e6d7165e8f86df94dacd8de6f1bfc780\r\n\r\nI can visit that place and check in which form Western Union appears there.\n", "before_files": [{"content": "import json\n\nfrom scrapy import Spider\nfrom scrapy.downloadermiddlewares.retry import get_retry_request\nfrom scrapy.http import JsonRequest\n\nfrom locations.categories import Categories\nfrom locations.dict_parser import DictParser\nfrom locations.geo import point_locations\nfrom locations.hours import OpeningHours\n\n\nclass WesternUnionSpider(Spider):\n    name = \"western_union\"\n    item_attributes = {\"brand\": \"Western Union\", \"brand_wikidata\": \"Q861042\", \"extras\": Categories.MONEY_TRANSFER.value}\n    allowed_domains = [\"www.westernunion.com\"]\n    # start_urls[0] is a GraphQL endpoint.\n    start_urls = [\"https://www.westernunion.com/router/\"]\n    download_delay = 0.2\n\n    def request_page(self, latitude, longitude, page_number):\n        # An access code for querying the GraphQL endpoint is\n        # required, This is constant across different browser\n        # sessions and the same for all users of the website.\n        headers = {\n            \"x-wu-accesscode\": \"RtYV3XDz9EA\",\n            \"x-wu-operationName\": \"locations\",\n        }\n        # The GraphQL query does not appear to allow for the page\n        # size to be increased. Typically the page size is observed\n        # by default to be 15 results per page.\n        #\n        # A radius of 350km is used by the API to search around each\n        # provided coordinate. There does not appear to be a way to\n        # specify an alternative radius.\n        data = {\n            \"query\": \"query locations($req:LocationInput) { locations(input: $req) }\",\n            \"variables\": {\n                \"req\": {\n                    \"longitude\": longitude,\n                    \"latitude\": latitude,\n                    \"country\": \"US\",  # Seemingly has no effect.\n                    \"openNow\": \"\",\n                    \"services\": [],\n                    \"sortOrder\": \"Distance\",\n                    \"pageNumber\": str(page_number),\n                }\n            },\n        }\n        yield JsonRequest(url=self.start_urls[0], method=\"POST\", headers=headers, data=data)\n\n    def start_requests(self):\n        # The GraphQL query searches for locations within a 350km\n        # radius of supplied coordinates, then returns locations in\n        # pages of 15 locations each page.\n        for lat, lon in point_locations(\"earth_centroids_iseadgg_346km_radius.csv\"):\n            yield from self.request_page(lat, lon, 1)\n\n    def parse(self, response):\n        # If crawling too fast, the server responds with a JSON\n        # blob containing an error message. Schedule a retry.\n        if \"results\" not in response.json()[\"data\"][\"locations\"]:\n            if \"errorCode\" in response.json()[\"data\"][\"locations\"]:\n                if response.json()[\"data\"][\"locations\"][\"errorCode\"] == 500:\n                    yield get_retry_request(\n                        response.request, spider=self, max_retry_times=5, reason=\"Retry after rate limiting error\"\n                    )\n                    return\n            # In case of an unhandled error, skip parsing.\n            return\n\n        # Parse the 15 (or fewer) locations from the response provided.\n        for location in response.json()[\"data\"][\"locations\"][\"results\"]:\n            item = DictParser.parse(location)\n            item[\"website\"] = \"https://location.westernunion.com/\" + location[\"detailsUrl\"]\n            item[\"opening_hours\"] = OpeningHours()\n            hours_string = \" \".join([f\"{day}: {hours}\" for (day, hours) in location[\"detail.hours\"].items()])\n            item[\"opening_hours\"].add_ranges_from_string(hours_string)\n            yield item\n\n        # On the first response per radius search of a coordinate,\n        # generate requests for all subsequent pages of results\n        # found by the API within the 350km search radius.\n        request_data = json.loads(response.request.body)\n        current_page = int(request_data[\"variables\"][\"req\"][\"pageNumber\"])\n        total_pages = response.json()[\"data\"][\"locations\"][\"pageCount\"]\n        if current_page == 1 and total_pages > 1:\n            for page_number in range(2, total_pages, 1):\n                yield from self.request_page(\n                    request_data[\"variables\"][\"req\"][\"latitude\"],\n                    request_data[\"variables\"][\"req\"][\"longitude\"],\n                    page_number,\n                )\n", "path": "locations/spiders/western_union.py"}], "after_files": [{"content": "import json\n\nfrom scrapy import Spider\nfrom scrapy.downloadermiddlewares.retry import get_retry_request\nfrom scrapy.http import JsonRequest\n\nfrom locations.dict_parser import DictParser\nfrom locations.geo import point_locations\nfrom locations.hours import OpeningHours\n\n\nclass WesternUnionSpider(Spider):\n    name = \"western_union\"\n    item_attributes = {\n        \"brand\": \"Western Union\",\n        \"brand_wikidata\": \"Q861042\",\n        \"extras\": {\"money_transfer\": \"western_union\"},\n    }\n    allowed_domains = [\"www.westernunion.com\"]\n    # start_urls[0] is a GraphQL endpoint.\n    start_urls = [\"https://www.westernunion.com/router/\"]\n    download_delay = 0.2\n\n    def request_page(self, latitude, longitude, page_number):\n        # An access code for querying the GraphQL endpoint is\n        # required, This is constant across different browser\n        # sessions and the same for all users of the website.\n        headers = {\n            \"x-wu-accesscode\": \"RtYV3XDz9EA\",\n            \"x-wu-operationName\": \"locations\",\n        }\n        # The GraphQL query does not appear to allow for the page\n        # size to be increased. Typically the page size is observed\n        # by default to be 15 results per page.\n        #\n        # A radius of 350km is used by the API to search around each\n        # provided coordinate. There does not appear to be a way to\n        # specify an alternative radius.\n        data = {\n            \"query\": \"query locations($req:LocationInput) { locations(input: $req) }\",\n            \"variables\": {\n                \"req\": {\n                    \"longitude\": longitude,\n                    \"latitude\": latitude,\n                    \"country\": \"US\",  # Seemingly has no effect.\n                    \"openNow\": \"\",\n                    \"services\": [],\n                    \"sortOrder\": \"Distance\",\n                    \"pageNumber\": str(page_number),\n                }\n            },\n        }\n        yield JsonRequest(url=self.start_urls[0], method=\"POST\", headers=headers, data=data)\n\n    def start_requests(self):\n        # The GraphQL query searches for locations within a 350km\n        # radius of supplied coordinates, then returns locations in\n        # pages of 15 locations each page.\n        for lat, lon in point_locations(\"earth_centroids_iseadgg_346km_radius.csv\"):\n            yield from self.request_page(lat, lon, 1)\n\n    def parse(self, response):\n        # If crawling too fast, the server responds with a JSON\n        # blob containing an error message. Schedule a retry.\n        if \"results\" not in response.json()[\"data\"][\"locations\"]:\n            if \"errorCode\" in response.json()[\"data\"][\"locations\"]:\n                if response.json()[\"data\"][\"locations\"][\"errorCode\"] == 500:\n                    yield get_retry_request(\n                        response.request, spider=self, max_retry_times=5, reason=\"Retry after rate limiting error\"\n                    )\n                    return\n            # In case of an unhandled error, skip parsing.\n            return\n\n        # Parse the 15 (or fewer) locations from the response provided.\n        for location in response.json()[\"data\"][\"locations\"][\"results\"]:\n            item = DictParser.parse(location)\n            item[\"website\"] = \"https://location.westernunion.com/\" + location[\"detailsUrl\"]\n            item[\"opening_hours\"] = OpeningHours()\n            hours_string = \" \".join([f\"{day}: {hours}\" for (day, hours) in location[\"detail.hours\"].items()])\n            item[\"opening_hours\"].add_ranges_from_string(hours_string)\n            yield item\n\n        # On the first response per radius search of a coordinate,\n        # generate requests for all subsequent pages of results\n        # found by the API within the 350km search radius.\n        request_data = json.loads(response.request.body)\n        current_page = int(request_data[\"variables\"][\"req\"][\"pageNumber\"])\n        total_pages = response.json()[\"data\"][\"locations\"][\"pageCount\"]\n        if current_page == 1 and total_pages > 1:\n            for page_number in range(2, total_pages, 1):\n                yield from self.request_page(\n                    request_data[\"variables\"][\"req\"][\"latitude\"],\n                    request_data[\"variables\"][\"req\"][\"longitude\"],\n                    page_number,\n                )\n", "path": "locations/spiders/western_union.py"}]}