prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Spider rubios is broken
  During the global build at 2021-05-26-14-42-23, spider **rubios** failed with **0 features** and **0 errors**.
  
  Here's [the log](https://data.alltheplaces.xyz/runs/2021-05-26-14-42-23/logs/rubios.log) and [the output](https://data.alltheplaces.xyz/runs/2021-05-26-14-42-23/output/rubios.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-05-26-14-42-23/output/rubios.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/rubios.py`
  Content:
  ```
  1 # -*- coding: utf-8 -*-
  2 import scrapy
  3 import re
  4 
  5 from locations.items import GeojsonPointItem
  6 
  7 
  8 class RubiosSpider(scrapy.Spider):
  9     name = "rubios"
  10     item_attributes = { 'brand': "Rubio's" }
  11     allowed_domains = ['rubios.com']
  12     start_urls = (
  13         'https://www.rubios.com/sitemap.xml',
  14     )
  15 
  16     def parse(self, response):
  17         response.selector.remove_namespaces()
  18         city_urls = response.xpath('//url/loc/text()').extract()
  19         regex = re.compile(r'http\S+rubios.com/store-locations/\S+/\S+/\S+')
  20         for path in city_urls:
  21             if re.search(regex, path):
  22                 yield scrapy.Request(
  23                     path.strip(),
  24                     callback=self.parse_store,
  25                 )
  26 
  27     def parse_store(self, response):
  28 
  29         properties = {
  30             'name': response.xpath('//span[@itemprop="name"]/text()').extract_first(),
  31             'ref': response.xpath('//span[@itemprop="name"]/text()').extract_first(),
  32             'addr_full': response.xpath('//span[@itemprop="streetAddress"]/text()').extract_first(),
  33             'city': response.xpath('//span[@itemprop="addressLocality"]/text()').extract_first(),
  34             'state': response.xpath('//span[@itemprop="addressRegion"]/text()').extract_first(),
  35             'postcode': response.xpath('//span[@itemprop="postalCode"]/text()').extract_first(),
  36             'phone': response.xpath('//span[@itemprop="telephone"]/a/text()').extract_first(),
  37             'website': response.url,
  38             'opening_hours': "".join(response.xpath('//div/div/div/span/span/span/text()').extract()).strip(),
  39             'lon': float(response.xpath('//head/script[9]').extract_first().split('"coordinates":[')[1].split(']')[0].split(',')[0]),
  40             'lat': float(response.xpath('//head/script[9]').extract_first().split('"coordinates":[')[1].split(']')[0].split(',')[1]),
  41         }
  42 
  43         yield GeojsonPointItem(**properties)
  44
  ```
  --- 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/rubios.py b/locations/spiders/rubios.py
  --- a/locations/spiders/rubios.py
  +++ b/locations/spiders/rubios.py
  @@ -16,7 +16,7 @@
       def parse(self, response):
           response.selector.remove_namespaces()
           city_urls = response.xpath('//url/loc/text()').extract()
  -        regex = re.compile(r'http\S+rubios.com/store-locations/\S+/\S+/\S+')
  +        regex = re.compile(r'http\S+rubios.com/restaurant-locations/\S+/\S+/\S+')
           for path in city_urls:
               if re.search(regex, path):
                   yield scrapy.Request(
  @@ -27,17 +27,18 @@
       def parse_store(self, response):
   
           properties = {
  -            'name': response.xpath('//span[@itemprop="name"]/text()').extract_first(),
  -            'ref': response.xpath('//span[@itemprop="name"]/text()').extract_first(),
  -            'addr_full': response.xpath('//span[@itemprop="streetAddress"]/text()').extract_first(),
  -            'city': response.xpath('//span[@itemprop="addressLocality"]/text()').extract_first(),
  -            'state': response.xpath('//span[@itemprop="addressRegion"]/text()').extract_first(),
  -            'postcode': response.xpath('//span[@itemprop="postalCode"]/text()').extract_first(),
  -            'phone': response.xpath('//span[@itemprop="telephone"]/a/text()').extract_first(),
  +            'name': response.xpath('//meta[@property="og:title"]/@content').extract_first(),
  +            'ref': response.url,
  +            'addr_full': response.xpath('//meta[@property="og:street_address"]/@content').extract_first(),
  +            'city': response.xpath('//meta[@property="og:locality"]/@content').extract_first(),
  +            'state': response.xpath('//meta[@property="og:region"]/@content').extract_first(),
  +            'postcode': response.xpath('//meta[@property="og:postal_code"]/@content').extract_first(),
  +            'country': response.xpath('//meta[@property="og:country_name"]/@content').extract_first(),
  +            'phone': response.xpath('//@href[contains(.,"tel:")]').extract_first().replace('tel:', ''),
               'website': response.url,
  -            'opening_hours': "".join(response.xpath('//div/div/div/span/span/span/text()').extract()).strip(),
  -            'lon': float(response.xpath('//head/script[9]').extract_first().split('"coordinates":[')[1].split(']')[0].split(',')[0]),
  -            'lat': float(response.xpath('//head/script[9]').extract_first().split('"coordinates":[')[1].split(']')[0].split(',')[1]),
  +            'opening_hours': ''.join(response.css('.oh-wrapper ::text').extract()),
  +            'lon': response.xpath('//meta[@property="og:longitude"]/@content').extract_first(),
  +            'lat': response.xpath('//meta[@property="og:latitude"]/@content').extract_first(),
           }
   
           yield GeojsonPointItem(**properties)
  
verification_info: {"golden_diff": "diff --git a/locations/spiders/rubios.py b/locations/spiders/rubios.py\n--- a/locations/spiders/rubios.py\n+++ b/locations/spiders/rubios.py\n@@ -16,7 +16,7 @@\n     def parse(self, response):\n         response.selector.remove_namespaces()\n         city_urls = response.xpath('//url/loc/text()').extract()\n-        regex = re.compile(r'http\\S+rubios.com/store-locations/\\S+/\\S+/\\S+')\n+        regex = re.compile(r'http\\S+rubios.com/restaurant-locations/\\S+/\\S+/\\S+')\n         for path in city_urls:\n             if re.search(regex, path):\n                 yield scrapy.Request(\n@@ -27,17 +27,18 @@\n     def parse_store(self, response):\n \n         properties = {\n-            'name': response.xpath('//span[@itemprop=\"name\"]/text()').extract_first(),\n-            'ref': response.xpath('//span[@itemprop=\"name\"]/text()').extract_first(),\n-            'addr_full': response.xpath('//span[@itemprop=\"streetAddress\"]/text()').extract_first(),\n-            'city': response.xpath('//span[@itemprop=\"addressLocality\"]/text()').extract_first(),\n-            'state': response.xpath('//span[@itemprop=\"addressRegion\"]/text()').extract_first(),\n-            'postcode': response.xpath('//span[@itemprop=\"postalCode\"]/text()').extract_first(),\n-            'phone': response.xpath('//span[@itemprop=\"telephone\"]/a/text()').extract_first(),\n+            'name': response.xpath('//meta[@property=\"og:title\"]/@content').extract_first(),\n+            'ref': response.url,\n+            'addr_full': response.xpath('//meta[@property=\"og:street_address\"]/@content').extract_first(),\n+            'city': response.xpath('//meta[@property=\"og:locality\"]/@content').extract_first(),\n+            'state': response.xpath('//meta[@property=\"og:region\"]/@content').extract_first(),\n+            'postcode': response.xpath('//meta[@property=\"og:postal_code\"]/@content').extract_first(),\n+            'country': response.xpath('//meta[@property=\"og:country_name\"]/@content').extract_first(),\n+            'phone': response.xpath('//@href[contains(.,\"tel:\")]').extract_first().replace('tel:', ''),\n             'website': response.url,\n-            'opening_hours': \"\".join(response.xpath('//div/div/div/span/span/span/text()').extract()).strip(),\n-            'lon': float(response.xpath('//head/script[9]').extract_first().split('\"coordinates\":[')[1].split(']')[0].split(',')[0]),\n-            'lat': float(response.xpath('//head/script[9]').extract_first().split('\"coordinates\":[')[1].split(']')[0].split(',')[1]),\n+            'opening_hours': ''.join(response.css('.oh-wrapper ::text').extract()),\n+            'lon': response.xpath('//meta[@property=\"og:longitude\"]/@content').extract_first(),\n+            'lat': response.xpath('//meta[@property=\"og:latitude\"]/@content').extract_first(),\n         }\n \n         yield GeojsonPointItem(**properties)\n", "issue": "Spider rubios is broken\nDuring the global build at 2021-05-26-14-42-23, spider **rubios** failed with **0 features** and **0 errors**.\n\nHere's [the log](https://data.alltheplaces.xyz/runs/2021-05-26-14-42-23/logs/rubios.log) and [the output](https://data.alltheplaces.xyz/runs/2021-05-26-14-42-23/output/rubios.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-05-26-14-42-23/output/rubios.geojson))\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\nimport scrapy\nimport re\n\nfrom locations.items import GeojsonPointItem\n\n\nclass RubiosSpider(scrapy.Spider):\n    name = \"rubios\"\n    item_attributes = { 'brand': \"Rubio's\" }\n    allowed_domains = ['rubios.com']\n    start_urls = (\n        'https://www.rubios.com/sitemap.xml',\n    )\n\n    def parse(self, response):\n        response.selector.remove_namespaces()\n        city_urls = response.xpath('//url/loc/text()').extract()\n        regex = re.compile(r'http\\S+rubios.com/store-locations/\\S+/\\S+/\\S+')\n        for path in city_urls:\n            if re.search(regex, path):\n                yield scrapy.Request(\n                    path.strip(),\n                    callback=self.parse_store,\n                )\n\n    def parse_store(self, response):\n\n        properties = {\n            'name': response.xpath('//span[@itemprop=\"name\"]/text()').extract_first(),\n            'ref': response.xpath('//span[@itemprop=\"name\"]/text()').extract_first(),\n            'addr_full': response.xpath('//span[@itemprop=\"streetAddress\"]/text()').extract_first(),\n            'city': response.xpath('//span[@itemprop=\"addressLocality\"]/text()').extract_first(),\n            'state': response.xpath('//span[@itemprop=\"addressRegion\"]/text()').extract_first(),\n            'postcode': response.xpath('//span[@itemprop=\"postalCode\"]/text()').extract_first(),\n            'phone': response.xpath('//span[@itemprop=\"telephone\"]/a/text()').extract_first(),\n            'website': response.url,\n            'opening_hours': \"\".join(response.xpath('//div/div/div/span/span/span/text()').extract()).strip(),\n            'lon': float(response.xpath('//head/script[9]').extract_first().split('\"coordinates\":[')[1].split(']')[0].split(',')[0]),\n            'lat': float(response.xpath('//head/script[9]').extract_first().split('\"coordinates\":[')[1].split(']')[0].split(',')[1]),\n        }\n\n        yield GeojsonPointItem(**properties)\n", "path": "locations/spiders/rubios.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\nimport scrapy\nimport re\n\nfrom locations.items import GeojsonPointItem\n\n\nclass RubiosSpider(scrapy.Spider):\n    name = \"rubios\"\n    item_attributes = { 'brand': \"Rubio's\" }\n    allowed_domains = ['rubios.com']\n    start_urls = (\n        'https://www.rubios.com/sitemap.xml',\n    )\n\n    def parse(self, response):\n        response.selector.remove_namespaces()\n        city_urls = response.xpath('//url/loc/text()').extract()\n        regex = re.compile(r'http\\S+rubios.com/restaurant-locations/\\S+/\\S+/\\S+')\n        for path in city_urls:\n            if re.search(regex, path):\n                yield scrapy.Request(\n                    path.strip(),\n                    callback=self.parse_store,\n                )\n\n    def parse_store(self, response):\n\n        properties = {\n            'name': response.xpath('//meta[@property=\"og:title\"]/@content').extract_first(),\n            'ref': response.url,\n            'addr_full': response.xpath('//meta[@property=\"og:street_address\"]/@content').extract_first(),\n            'city': response.xpath('//meta[@property=\"og:locality\"]/@content').extract_first(),\n            'state': response.xpath('//meta[@property=\"og:region\"]/@content').extract_first(),\n            'postcode': response.xpath('//meta[@property=\"og:postal_code\"]/@content').extract_first(),\n            'country': response.xpath('//meta[@property=\"og:country_name\"]/@content').extract_first(),\n            'phone': response.xpath('//@href[contains(.,\"tel:\")]').extract_first().replace('tel:', ''),\n            'website': response.url,\n            'opening_hours': ''.join(response.css('.oh-wrapper ::text').extract()),\n            'lon': response.xpath('//meta[@property=\"og:longitude\"]/@content').extract_first(),\n            'lat': response.xpath('//meta[@property=\"og:latitude\"]/@content').extract_first(),\n        }\n\n        yield GeojsonPointItem(**properties)\n", "path": "locations/spiders/rubios.py"}]}