Repository: alltheplaces/alltheplaces

Issue:
Greenhalgh's (GB) (shop/bakery) (Wordpress) - 46 locations
### Brand name

Greenhalgh's

UK bakery chain

### Wikidata ID

Q99939079
https://www.wikidata.org/wiki/Q99939079
https://www.wikidata.org/wiki/Special:EntityData/Q99939079.json

### Store finder url(s)

Official Url(s): https://www.greenhalghs.com/
- [x] I have run the below and if anything in generated, added it.
- [x] I have manually checked for a storefinder
- [x] This is not a manufacturer listing outlets operating under their own brands / this will not create duplicates
`pipenv run scrapy sf --brand-wikidata=Q99939079 https://www.greenhalghs.com/`
```
from locations.categories import Categories
from locations.storefinders.wp_store_locator import WPStoreLocatorSpider


class GreenhalghsGBSpider(WPStoreLocatorSpider):
        name = "greenhalghs_gb"
        item_attributes = {
                "brand_wikidata": "Q99939079",
                "brand": "Greenhalgh's",
        }
        allowed_domains = [
                "www.greenhalghs.com",
        ]
        time_format = "%H:%M %p"
```

```
{"atp/brand/Greenhalgh's": 46,
 'atp/brand_wikidata/Q99939079': 46,
 'atp/category/shop/bakery': 46,
 'atp/cdn/cloudflare/response_count': 2,
 'atp/cdn/cloudflare/response_status_count/200': 2,
 'atp/field/email/missing': 46,
 'atp/field/image/missing': 46,
 'atp/field/opening_hours/missing': 5,
 'atp/field/operator/missing': 46,
 'atp/field/operator_wikidata/missing': 46,
 'atp/field/phone/missing': 1,
 'atp/field/state/missing': 45,
 'atp/field/twitter/missing': 46,
 'atp/field/website/invalid': 7,
 'atp/field/website/missing': 1,
 'atp/nsi/perfect_match': 46,
 'downloader/request_bytes': 679,
 'downloader/request_count': 2,
 'downloader/request_method_count/GET': 2,
 'downloader/response_bytes': 8188,
 'downloader/response_count': 2,
 'downloader/response_status_count/200': 2,
 'elapsed_time_seconds': 5.324976,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2024, 2, 20, 21, 26, 10, 446303, tzinfo=datetime.timezone.utc),
 'httpcompression/response_bytes': 48810,
 'httpcompression/response_count': 2,
 'item_scraped_count': 46,
 'log_count/DEBUG': 59,
 'log_count/INFO': 9,
 'memusage/max': 148320256,
 'memusage/startup': 148320256,
 'response_received_count': 2,
 'robotstxt/request_count': 1,
 'robotstxt/response_count': 1,
 'robotstxt/response_status_count/200': 1,
 'scheduler/dequeued': 1,
 'scheduler/dequeued/memory': 1,
 'scheduler/enqueued': 1,
 'scheduler/enqueued/memory': 1,
 'start_time': datetime.datetime(2024, 2, 20, 21, 26, 5, 121327, tzinfo=datetime.timezone.utc)}
2024-02-20 21:26:10 [scrapy.core.engine] INFO: Spider closed (finished)
```


Discussion:
Something busted with my github auth, have tested the above, just can't push at the moment. @davidhicks do you feel like flipping the above into a PR? 

Resolving patch:
diff --git a/locations/spiders/greenhalghs_gb.py b/locations/spiders/greenhalghs_gb.py
new file mode 100644
--- /dev/null
+++ b/locations/spiders/greenhalghs_gb.py
@@ -0,0 +1,16 @@
+from locations.categories import Categories
+from locations.storefinders.wp_store_locator import WPStoreLocatorSpider
+
+
+class GreenhalghsGBSpider(WPStoreLocatorSpider):
+    name = "greenhalghs_gb"
+    item_attributes = {"brand": "Greenhalgh's", "brand_wikidata": "Q99939079", "extras": Categories.SHOP_BAKERY.value}
+    allowed_domains = ["www.greenhalghs.com"]
+    time_format = "%I:%M %p"
+
+    def parse_item(self, item, location):
+        item.pop("addr_full", None)
+        item["street_address"] = location.get("address2")
+        if item["website"] and item["website"].startswith("/"):
+            item["website"] = "https://www.greenhalghs.com" + item["website"]
+        yield item


Test patch: