prompt: 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()
  
  ```
  
golden_diff: 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)
  
verification_info: {"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"}]}