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

Here's [the log](https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/logs/wsp.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/output/wsp.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/output/wsp.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/wsp.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 import scrapy
3 import json
4 from locations.items import GeojsonPointItem
5 
6 
7 class wsp(scrapy.Spider):
8     name = "wsp"
9     item_attributes = {'brand': "wsp"}
10     allowed_domains = ["www.wsp.com"]
11     start_urls = (
12         'https://www.wsp.com',
13     )
14 
15     def parse(self, response):
16         url = 'https://www.wsp.com/api/sitecore/Maps/GetMapPoints'
17 
18         formdata = {
19             'itemId': '{2F436202-D2B9-4F3D-8ECC-5E0BCA533888}',
20         }
21 
22         yield scrapy.http.FormRequest(
23             url,
24             self.parse_store,
25             method='POST',
26             formdata=formdata,
27             )
28 
29     def parse_store(self, response):
30         office_data = json.loads(response.body_as_unicode())
31 
32         for office in office_data:
33             try:
34                 properties = {
35                     'ref': office["ID"]["Guid"],
36                     'addr_full': office["Address"],
37                     'lat': office["Location"].split(",")[0],
38                     'lon': office["Location"].split(",")[1],
39                     'name': office["Name"],
40                     'website': office["MapPointURL"]
41                 }
42             except IndexError:
43                 continue
44 
45             yield GeojsonPointItem(**properties)
```
--- 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/wsp.py b/locations/spiders/wsp.py
--- a/locations/spiders/wsp.py
+++ b/locations/spiders/wsp.py
@@ -9,7 +9,7 @@
     item_attributes = {'brand': "wsp"}
     allowed_domains = ["www.wsp.com"]
     start_urls = (
-        'https://www.wsp.com',
+        'https://www.wsp.com/',
     )
 
     def parse(self, response):
@@ -24,10 +24,10 @@
             self.parse_store,
             method='POST',
             formdata=formdata,
-            )
+        )
 
     def parse_store(self, response):
-        office_data = json.loads(response.body_as_unicode())
+        office_data = json.loads(response.text)
 
         for office in office_data:
             try:
@@ -37,9 +37,9 @@
                     'lat': office["Location"].split(",")[0],
                     'lon': office["Location"].split(",")[1],
                     'name': office["Name"],
-                    'website': office["MapPointURL"]
+                    'website': response.urljoin(office["MapPointURL"]),
                 }
             except IndexError:
                 continue
 
-            yield GeojsonPointItem(**properties)
\ No newline at end of file
+            yield GeojsonPointItem(**properties)

{"golden_diff": "diff --git a/locations/spiders/wsp.py b/locations/spiders/wsp.py\n--- a/locations/spiders/wsp.py\n+++ b/locations/spiders/wsp.py\n@@ -9,7 +9,7 @@\n     item_attributes = {'brand': \"wsp\"}\n     allowed_domains = [\"www.wsp.com\"]\n     start_urls = (\n-        'https://www.wsp.com',\n+        'https://www.wsp.com/',\n     )\n \n     def parse(self, response):\n@@ -24,10 +24,10 @@\n             self.parse_store,\n             method='POST',\n             formdata=formdata,\n-            )\n+        )\n \n     def parse_store(self, response):\n-        office_data = json.loads(response.body_as_unicode())\n+        office_data = json.loads(response.text)\n \n         for office in office_data:\n             try:\n@@ -37,9 +37,9 @@\n                     'lat': office[\"Location\"].split(\",\")[0],\n                     'lon': office[\"Location\"].split(\",\")[1],\n                     'name': office[\"Name\"],\n-                    'website': office[\"MapPointURL\"]\n+                    'website': response.urljoin(office[\"MapPointURL\"]),\n                 }\n             except IndexError:\n                 continue\n \n-            yield GeojsonPointItem(**properties)\n\\ No newline at end of file\n+            yield GeojsonPointItem(**properties)\n", "issue": "Spider wsp is broken\nDuring the global build at 2021-09-01-14-42-16, spider **wsp** failed with **0 features** and **0 errors**.\n\nHere's [the log](https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/logs/wsp.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/output/wsp.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-09-01-14-42-16/output/wsp.geojson))\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\nimport scrapy\nimport json\nfrom locations.items import GeojsonPointItem\n\n\nclass wsp(scrapy.Spider):\n    name = \"wsp\"\n    item_attributes = {'brand': \"wsp\"}\n    allowed_domains = [\"www.wsp.com\"]\n    start_urls = (\n        'https://www.wsp.com',\n    )\n\n    def parse(self, response):\n        url = 'https://www.wsp.com/api/sitecore/Maps/GetMapPoints'\n\n        formdata = {\n            'itemId': '{2F436202-D2B9-4F3D-8ECC-5E0BCA533888}',\n        }\n\n        yield scrapy.http.FormRequest(\n            url,\n            self.parse_store,\n            method='POST',\n            formdata=formdata,\n            )\n\n    def parse_store(self, response):\n        office_data = json.loads(response.body_as_unicode())\n\n        for office in office_data:\n            try:\n                properties = {\n                    'ref': office[\"ID\"][\"Guid\"],\n                    'addr_full': office[\"Address\"],\n                    'lat': office[\"Location\"].split(\",\")[0],\n                    'lon': office[\"Location\"].split(\",\")[1],\n                    'name': office[\"Name\"],\n                    'website': office[\"MapPointURL\"]\n                }\n            except IndexError:\n                continue\n\n            yield GeojsonPointItem(**properties)", "path": "locations/spiders/wsp.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\nimport scrapy\nimport json\nfrom locations.items import GeojsonPointItem\n\n\nclass wsp(scrapy.Spider):\n    name = \"wsp\"\n    item_attributes = {'brand': \"wsp\"}\n    allowed_domains = [\"www.wsp.com\"]\n    start_urls = (\n        'https://www.wsp.com/',\n    )\n\n    def parse(self, response):\n        url = 'https://www.wsp.com/api/sitecore/Maps/GetMapPoints'\n\n        formdata = {\n            'itemId': '{2F436202-D2B9-4F3D-8ECC-5E0BCA533888}',\n        }\n\n        yield scrapy.http.FormRequest(\n            url,\n            self.parse_store,\n            method='POST',\n            formdata=formdata,\n        )\n\n    def parse_store(self, response):\n        office_data = json.loads(response.text)\n\n        for office in office_data:\n            try:\n                properties = {\n                    'ref': office[\"ID\"][\"Guid\"],\n                    'addr_full': office[\"Address\"],\n                    'lat': office[\"Location\"].split(\",\")[0],\n                    'lon': office[\"Location\"].split(\",\")[1],\n                    'name': office[\"Name\"],\n                    'website': response.urljoin(office[\"MapPointURL\"]),\n                }\n            except IndexError:\n                continue\n\n            yield GeojsonPointItem(**properties)\n", "path": "locations/spiders/wsp.py"}]}