We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Domain missing from Holland & Barrett website URLs
In the holland_and_barrett spider results, the website values returned are missing the domain, e.g. `"website": "/stores/aylesbury-3180/"`. This is what's in the code that the scraper is reading. But presumably AllThePlaces should return a fully qualified url, i.e. `https://www.hollandandbarrett.com/stores/aylesbury-3180/` in this case.

I don't know what the micordata etc standards say about whether relative URLs are allowed, but perhaps the framework code could be modified to automatically complete the URL of the page if a relative URL is harvested.

--- 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/holland_and_barrett.py`
Content:
```
1 from scrapy.spiders import SitemapSpider
2 
3 from locations.linked_data_parser import LinkedDataParser
4 
5 
6 class HollandAndBarrettSpider(SitemapSpider):
7     name = "holland_and_barrett"
8     item_attributes = {
9         "brand": "Holland & Barrett",
10         "brand_wikidata": "Q5880870",
11     }
12     sitemap_urls = [
13         "https://www.hollandandbarrett.com/sitemap-stores.xml",
14         "https://www.hollandandbarrett.nl/sitemap-stores.xml",
15         "https://www.hollandandbarrett.be/sitemap-stores.xml",
16         "https://www.hollandandbarrett.ie/sitemap-stores.xml",
17     ]
18     sitemap_rules = [("/stores/", "parse"), ("/winkels/", "parse")]
19     download_delay = 1.0
20 
21     def parse(self, response):
22         yield LinkedDataParser.parse(response, "LocalBusiness")
23
```
--- 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/holland_and_barrett.py b/locations/spiders/holland_and_barrett.py
--- a/locations/spiders/holland_and_barrett.py
+++ b/locations/spiders/holland_and_barrett.py
@@ -19,4 +19,6 @@
     download_delay = 1.0
 
     def parse(self, response):
-        yield LinkedDataParser.parse(response, "LocalBusiness")
+        item = LinkedDataParser.parse(response, "LocalBusiness")
+        item["website"] = response.urljoin(item["website"])
+        yield item

{"golden_diff": "diff --git a/locations/spiders/holland_and_barrett.py b/locations/spiders/holland_and_barrett.py\n--- a/locations/spiders/holland_and_barrett.py\n+++ b/locations/spiders/holland_and_barrett.py\n@@ -19,4 +19,6 @@\n     download_delay = 1.0\n \n     def parse(self, response):\n-        yield LinkedDataParser.parse(response, \"LocalBusiness\")\n+        item = LinkedDataParser.parse(response, \"LocalBusiness\")\n+        item[\"website\"] = response.urljoin(item[\"website\"])\n+        yield item\n", "issue": "Domain missing from Holland & Barrett website URLs\nIn the holland_and_barrett spider results, the website values returned are missing the domain, e.g. `\"website\": \"/stores/aylesbury-3180/\"`. This is what's in the code that the scraper is reading. But presumably AllThePlaces should return a fully qualified url, i.e. `https://www.hollandandbarrett.com/stores/aylesbury-3180/` in this case.\r\n\r\nI don't know what the micordata etc standards say about whether relative URLs are allowed, but perhaps the framework code could be modified to automatically complete the URL of the page if a relative URL is harvested.\n", "before_files": [{"content": "from scrapy.spiders import SitemapSpider\n\nfrom locations.linked_data_parser import LinkedDataParser\n\n\nclass HollandAndBarrettSpider(SitemapSpider):\n    name = \"holland_and_barrett\"\n    item_attributes = {\n        \"brand\": \"Holland & Barrett\",\n        \"brand_wikidata\": \"Q5880870\",\n    }\n    sitemap_urls = [\n        \"https://www.hollandandbarrett.com/sitemap-stores.xml\",\n        \"https://www.hollandandbarrett.nl/sitemap-stores.xml\",\n        \"https://www.hollandandbarrett.be/sitemap-stores.xml\",\n        \"https://www.hollandandbarrett.ie/sitemap-stores.xml\",\n    ]\n    sitemap_rules = [(\"/stores/\", \"parse\"), (\"/winkels/\", \"parse\")]\n    download_delay = 1.0\n\n    def parse(self, response):\n        yield LinkedDataParser.parse(response, \"LocalBusiness\")\n", "path": "locations/spiders/holland_and_barrett.py"}], "after_files": [{"content": "from scrapy.spiders import SitemapSpider\n\nfrom locations.linked_data_parser import LinkedDataParser\n\n\nclass HollandAndBarrettSpider(SitemapSpider):\n    name = \"holland_and_barrett\"\n    item_attributes = {\n        \"brand\": \"Holland & Barrett\",\n        \"brand_wikidata\": \"Q5880870\",\n    }\n    sitemap_urls = [\n        \"https://www.hollandandbarrett.com/sitemap-stores.xml\",\n        \"https://www.hollandandbarrett.nl/sitemap-stores.xml\",\n        \"https://www.hollandandbarrett.be/sitemap-stores.xml\",\n        \"https://www.hollandandbarrett.ie/sitemap-stores.xml\",\n    ]\n    sitemap_rules = [(\"/stores/\", \"parse\"), (\"/winkels/\", \"parse\")]\n    download_delay = 1.0\n\n    def parse(self, response):\n        item = LinkedDataParser.parse(response, \"LocalBusiness\")\n        item[\"website\"] = response.urljoin(item[\"website\"])\n        yield item\n", "path": "locations/spiders/holland_and_barrett.py"}]}