prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Spider longhorn_steakhouse is broken
  During the global build at 2021-10-20-14-42-48, spider **longhorn_steakhouse** failed with **0 features** and **0 errors**.
  
  Here's [the log](https://data.alltheplaces.xyz/runs/2021-10-20-14-42-48/logs/longhorn_steakhouse.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-10-20-14-42-48/output/longhorn_steakhouse.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-10-20-14-42-48/output/longhorn_steakhouse.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/longhorn_steakhouse.py`
  Content:
  ```
  1 # -*- coding: utf-8 -*-
  2 import json
  3 import re
  4 
  5 import scrapy
  6 
  7 from locations.items import GeojsonPointItem
  8 from locations.hours import OpeningHours
  9 
  10 
  11 class LongHornSteakhouseSpider(scrapy.Spider):
  12     name = "longhorn_steakhouse"
  13     item_attributes = {'brand': 'LongHorn Steakhouse', 'brand_wikidata': "Q3259007"}
  14     allowed_domains = []
  15     start_urls = [
  16         'https://www.longhornsteakhouse.com/locations-sitemap.xml',
  17     ]
  18     custom_settings = {
  19         'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
  20     }
  21     download_delay = 5
  22 
  23     def parse_hours(self, hours):
  24         opening_hours = OpeningHours()
  25 
  26         for hour in hours:
  27             day, open_close = hour.split(' ')
  28             open_time, close_time = open_close.split('-')
  29             opening_hours.add_range(day=day, open_time=open_time, close_time=close_time, time_format='%H:%M')
  30         return opening_hours.as_opening_hours()
  31 
  32     def parse(self, response):
  33         response.selector.remove_namespaces()
  34         urls = response.xpath('//url/loc/text()').extract()
  35         for url in urls:
  36             yield scrapy.Request(url=url, callback=self.parse_store)
  37 
  38     def parse_store(self, response):
  39         store_data = response.xpath('//script[@type="application/ld+json" and contains(text(), "streetAddress")]/text()').extract_first()
  40         if store_data:
  41             data = json.loads(store_data)
  42             ref = re.search(r'.+/(.+?)/?(?:\.html|$)', response.url).group(1)
  43 
  44             # Handle store pages that are missing the application/ld+json data
  45             addr, city_state_zip, phone = response.xpath('//p[@id="info-link-webhead"]/text()').extract()
  46             city, state, postcode = re.search(r'(.*?),\s([A-Z]{2})\s([\d-]+)$', city_state_zip).groups()
  47 
  48             properties = {
  49                 'name': data.get("name") or response.xpath('//h1[@class="style_h1"]/text()').extract_first().strip(),
  50                 'ref': data["branchCode"] or ref,
  51                 'addr_full': data["address"]["streetAddress"].strip() or addr.strip(),
  52                 'city': data["address"]["addressLocality"] or city,
  53                 'state': data["address"]["addressRegion"] or state,
  54                 'postcode': data["address"]["postalCode"] or postcode,
  55                 'country': data["address"]["addressCountry"],
  56                 'phone': data.get("telephone") or phone.strip(),
  57                 'website': data.get("url") or response.url,
  58                 'lat': float(data["geo"]["latitude"]),
  59                 'lon': float(data["geo"]["longitude"]),
  60             }
  61 
  62             hours = data.get("openingHours")
  63             if hours:
  64                 store_hours = self.parse_hours(hours)
  65                 properties["opening_hours"] = store_hours
  66 
  67             yield GeojsonPointItem(**properties)
  68
  ```
  --- 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/longhorn_steakhouse.py b/locations/spiders/longhorn_steakhouse.py
  --- a/locations/spiders/longhorn_steakhouse.py
  +++ b/locations/spiders/longhorn_steakhouse.py
  @@ -18,7 +18,7 @@
       custom_settings = {
           'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
       }
  -    download_delay = 5
  +    download_delay = 1
   
       def parse_hours(self, hours):
           opening_hours = OpeningHours()
  
verification_info: {"golden_diff": "diff --git a/locations/spiders/longhorn_steakhouse.py b/locations/spiders/longhorn_steakhouse.py\n--- a/locations/spiders/longhorn_steakhouse.py\n+++ b/locations/spiders/longhorn_steakhouse.py\n@@ -18,7 +18,7 @@\n     custom_settings = {\n         'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',\n     }\n-    download_delay = 5\n+    download_delay = 1\n \n     def parse_hours(self, hours):\n         opening_hours = OpeningHours()\n", "issue": "Spider longhorn_steakhouse is broken\nDuring the global build at 2021-10-20-14-42-48, spider **longhorn_steakhouse** failed with **0 features** and **0 errors**.\n\nHere's [the log](https://data.alltheplaces.xyz/runs/2021-10-20-14-42-48/logs/longhorn_steakhouse.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-10-20-14-42-48/output/longhorn_steakhouse.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-10-20-14-42-48/output/longhorn_steakhouse.geojson))\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\nimport json\nimport re\n\nimport scrapy\n\nfrom locations.items import GeojsonPointItem\nfrom locations.hours import OpeningHours\n\n\nclass LongHornSteakhouseSpider(scrapy.Spider):\n    name = \"longhorn_steakhouse\"\n    item_attributes = {'brand': 'LongHorn Steakhouse', 'brand_wikidata': \"Q3259007\"}\n    allowed_domains = []\n    start_urls = [\n        'https://www.longhornsteakhouse.com/locations-sitemap.xml',\n    ]\n    custom_settings = {\n        'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',\n    }\n    download_delay = 5\n\n    def parse_hours(self, hours):\n        opening_hours = OpeningHours()\n\n        for hour in hours:\n            day, open_close = hour.split(' ')\n            open_time, close_time = open_close.split('-')\n            opening_hours.add_range(day=day, open_time=open_time, close_time=close_time, time_format='%H:%M')\n        return opening_hours.as_opening_hours()\n\n    def parse(self, response):\n        response.selector.remove_namespaces()\n        urls = response.xpath('//url/loc/text()').extract()\n        for url in urls:\n            yield scrapy.Request(url=url, callback=self.parse_store)\n\n    def parse_store(self, response):\n        store_data = response.xpath('//script[@type=\"application/ld+json\" and contains(text(), \"streetAddress\")]/text()').extract_first()\n        if store_data:\n            data = json.loads(store_data)\n            ref = re.search(r'.+/(.+?)/?(?:\\.html|$)', response.url).group(1)\n\n            # Handle store pages that are missing the application/ld+json data\n            addr, city_state_zip, phone = response.xpath('//p[@id=\"info-link-webhead\"]/text()').extract()\n            city, state, postcode = re.search(r'(.*?),\\s([A-Z]{2})\\s([\\d-]+)$', city_state_zip).groups()\n\n            properties = {\n                'name': data.get(\"name\") or response.xpath('//h1[@class=\"style_h1\"]/text()').extract_first().strip(),\n                'ref': data[\"branchCode\"] or ref,\n                'addr_full': data[\"address\"][\"streetAddress\"].strip() or addr.strip(),\n                'city': data[\"address\"][\"addressLocality\"] or city,\n                'state': data[\"address\"][\"addressRegion\"] or state,\n                'postcode': data[\"address\"][\"postalCode\"] or postcode,\n                'country': data[\"address\"][\"addressCountry\"],\n                'phone': data.get(\"telephone\") or phone.strip(),\n                'website': data.get(\"url\") or response.url,\n                'lat': float(data[\"geo\"][\"latitude\"]),\n                'lon': float(data[\"geo\"][\"longitude\"]),\n            }\n\n            hours = data.get(\"openingHours\")\n            if hours:\n                store_hours = self.parse_hours(hours)\n                properties[\"opening_hours\"] = store_hours\n\n            yield GeojsonPointItem(**properties)\n", "path": "locations/spiders/longhorn_steakhouse.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\nimport json\nimport re\n\nimport scrapy\n\nfrom locations.items import GeojsonPointItem\nfrom locations.hours import OpeningHours\n\n\nclass LongHornSteakhouseSpider(scrapy.Spider):\n    name = \"longhorn_steakhouse\"\n    item_attributes = {'brand': 'LongHorn Steakhouse', 'brand_wikidata': \"Q3259007\"}\n    allowed_domains = []\n    start_urls = [\n        'https://www.longhornsteakhouse.com/locations-sitemap.xml',\n    ]\n    custom_settings = {\n        'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',\n    }\n    download_delay = 1\n\n    def parse_hours(self, hours):\n        opening_hours = OpeningHours()\n\n        for hour in hours:\n            day, open_close = hour.split(' ')\n            open_time, close_time = open_close.split('-')\n            opening_hours.add_range(day=day, open_time=open_time, close_time=close_time, time_format='%H:%M')\n        return opening_hours.as_opening_hours()\n\n    def parse(self, response):\n        response.selector.remove_namespaces()\n        urls = response.xpath('//url/loc/text()').extract()\n        for url in urls:\n            yield scrapy.Request(url=url, callback=self.parse_store)\n\n    def parse_store(self, response):\n        store_data = response.xpath('//script[@type=\"application/ld+json\" and contains(text(), \"streetAddress\")]/text()').extract_first()\n        if store_data:\n            data = json.loads(store_data)\n            ref = re.search(r'.+/(.+?)/?(?:\\.html|$)', response.url).group(1)\n\n            # Handle store pages that are missing the application/ld+json data\n            addr, city_state_zip, phone = response.xpath('//p[@id=\"info-link-webhead\"]/text()').extract()\n            city, state, postcode = re.search(r'(.*?),\\s([A-Z]{2})\\s([\\d-]+)$', city_state_zip).groups()\n\n            properties = {\n                'name': data.get(\"name\") or response.xpath('//h1[@class=\"style_h1\"]/text()').extract_first().strip(),\n                'ref': data[\"branchCode\"] or ref,\n                'addr_full': data[\"address\"][\"streetAddress\"].strip() or addr.strip(),\n                'city': data[\"address\"][\"addressLocality\"] or city,\n                'state': data[\"address\"][\"addressRegion\"] or state,\n                'postcode': data[\"address\"][\"postalCode\"] or postcode,\n                'country': data[\"address\"][\"addressCountry\"],\n                'phone': data.get(\"telephone\") or phone.strip(),\n                'website': data.get(\"url\") or response.url,\n                'lat': float(data[\"geo\"][\"latitude\"]),\n                'lon': float(data[\"geo\"][\"longitude\"]),\n            }\n\n            hours = data.get(\"openingHours\")\n            if hours:\n                store_hours = self.parse_hours(hours)\n                properties[\"opening_hours\"] = store_hours\n\n            yield GeojsonPointItem(**properties)\n", "path": "locations/spiders/longhorn_steakhouse.py"}]}