{"id":21801,"date":"2025-02-25T10:46:12","date_gmt":"2025-02-25T10:46:12","guid":{"rendered":"https:\/\/www.scrapingdog.com\/?p=21801"},"modified":"2025-11-13T11:18:45","modified_gmt":"2025-11-13T11:18:45","slug":"analyzing-footfall-near-british-museum-by-scraping-popular-times-data-from-google-maps","status":"publish","type":"post","link":"https:\/\/www.scrapingdog.com\/blog\/analyzing-footfall-near-british-museum-by-scraping-popular-times-data-from-google-maps\/","title":{"rendered":"Analysing Footfall Near British Museum By Scraping Popular Times Data from Google Maps"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"21801\" class=\"elementor elementor-21801\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-609f9be e-flex e-con-boxed e-con e-parent\" data-id=\"609f9be\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-46768ab elementor-widget elementor-widget-html\" data-id=\"46768ab\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- Gutenberg \u201cCustom HTML\u201d block -->\r\n<div style=\"\r\n  background:#d9f4e5;\r\n  border-left:4px solid #1d9b6c;\r\n  padding:18px 24px;\r\n  margin:24px 0;\r\n  border-radius:6px;\r\n  font-family:'Montserrat',sans-serif;\r\n  font-size:18px;\r\n  line-height:1.65;\r\n  color:#1a1a1a;\">\r\n  <p style=\"margin:0 0 8px 0;font-weight:600;\">TL;DR<\/p>\r\n\r\n  <ul style=\"margin:0; padding-left:20px;\">\r\n    <li>Analyzes footfall near the British Museum using Google Maps \u201cPopular Times\u201d.<\/li>\r\n    <li>Flow: collect nearby businesses, extract hourly popularity, average by hour, visualize with heatmaps.<\/li>\r\n    <li>Stack: Python (<code>requests<\/code>, <code>pandas<\/code>), <code>seaborn<\/code> \/ <code>matplotlib<\/code>; sample code + images included.<\/li>\r\n    <li>Categories covered: restaurants, caf\u00e9s, galleries, pubs, theatres (caf\u00e9s peak at lunch).<\/li>\r\n    <li>Powered by <strong>Scrapingdog\u2019s Google Maps API<\/strong>.<\/li>\r\n  <\/ul>\r\n<\/div>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c895778 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"c895778\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"ef79\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">Google Maps is a great storehouse of information for businesses looking to extract phone numbers for lead generation, customer reviews for sentimental analysis, images for real-estate mapping, and footfall for analyzing the peak hours of certain places at a particular time.<\/p><p id=\"08be\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">In this article, we will scrape and analyze Google Maps\u2019 Popular Times data for businesses in London during peak hours and visualize it using graphs and heat maps.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-11a5030 elementor-widget elementor-widget-heading\" data-id=\"11a5030\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Process<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ccb702 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"2ccb702\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"ef79\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">In our first step, we would be scraping the list of businesses from Google Maps in a particular area of interest.<\/p><p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*077Va5-Iw8KcGIH4_tO9IA.png\" \/><\/p><p id=\"5947\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">The area around the British Museum looks good for exploring the businesses of London. Here is the list of companies we are going to analyze:<\/p><ul class=\"\"><li id=\"d99c\" class=\"lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Restaurants \u2014 Indian Restaurants, French Bistros<\/strong><\/li><li id=\"3f7c\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Caf\u00e9s<\/strong><\/li><li id=\"f590\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Art Galleries and Museums<\/strong><\/li><li id=\"527c\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Pubs and Bars<\/strong><\/li><li id=\"9422\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Theatres and Entertainment Venues<\/strong><\/li><\/ul><p id=\"3423\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">We will get the search listings for the above businesses by using our Google Maps API.<\/p><p id=\"75a7\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">You can refer to this\u00a0<a class=\"af ob\" href=\"https:\/\/docs.scrapingdog.com\/google-maps-api\" target=\"_blank\" rel=\"nofollow noopener\">documentation<\/a>\u00a0for more information on using Scrapingdog Google Maps API.<\/p><p id=\"16bb\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">I am sharing a sample code of how I collected the businesses for each type.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7c6f94f elementor-widget elementor-widget-code-highlight\" data-id=\"7c6f94f\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp>import requests\nimport json\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\nAPI_KEY = \"APIKEY\"\nBASE_URL = \"https:\/\/api.scrapingdog.com\/google_maps\"\nPLACES_URL = \"https:\/\/api.scrapingdog.com\/google_maps\/places\"\n\n# Fetch business data\ndef get_data():\n    response = requests.get(f\"{BASE_URL}?ll=@51.5181901,-0.1525433,5z&query=Indian Restaurants Near The British Museum&api_key={API_KEY}\")\n    data = response.json()\n    businesses = []\n\n    for place in data.get(\"search_results\", []):\n        title = place.get(\"title\")\n        place_id = place.get(\"place_id\")\n\n        if not title or not place_id:\n            continue\n\n        try:\n            place_response = requests.get(f\"{PLACES_URL}?place_id={place_id}&api_key={API_KEY}\")\n            place_data = place_response.json()\n            popularity_scores = place_data.get(\"place_results\", {}).get(\"popular_times\", {}).get(\"graph_results\", {})\n        except Exception as e:\n            print(f\"Error fetching details for {title}: {e}\")\n            popularity_scores = {}\n\n        businesses.append({\n            \"title\": title,\n            \"place_id\": place_id,\n            \"popularity_scores\": popularity_scores\n        })\n\n    # Save data to JSON\n    with open(\"businessLists.json\", \"w\") as f:\n        json.dump(businesses, f, indent=2)\n    print(\"File written successfully!\")\n\n    return businesses<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ae7e0d elementor-widget elementor-widget-heading\" data-id=\"5ae7e0d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Step by Step Process<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5174c72 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"5174c72\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3 id=\"0afa\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Importing Required Libraries<\/strong><\/h3><ul class=\"\"><li id=\"8fce\" class=\"lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\"><code>requests<\/code><\/strong>\u00a0\u2192 Used to make HTTP requests to the API.<\/li><li id=\"9918\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\"><code>json<\/code><\/strong>\u00a0\u2192 Handles JSON data (parsing &amp; saving).<\/li><li id=\"7eda\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\"><code>seaborn<\/code><\/strong><strong class=\"lj fr\">\u00a0&amp;\u00a0<\/strong><strong class=\"lj fr\"><code>matplotlib.pyplot<\/code><\/strong>\u00a0\u2192 Used for visualization (not used in this function but likely needed for later).<\/li><li id=\"2eb1\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\"><code>pandas<\/code><\/strong>\u00a0\u2192 Used for data analysis (not used in this function but likely needed for later).<\/li><\/ul><h3 id=\"c488\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Setting API Constants<\/strong><\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b548412 elementor-widget elementor-widget-code-highlight\" data-id=\"b548412\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp>API_KEY = \"APIKEY\"\nBASE_URL = \"https:\/\/api.scrapingdog.com\/google_maps\"\nPLACES_URL = \"https:\/\/api.scrapingdog.com\/google_maps\/places\"<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0579f5b font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"0579f5b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul class=\"\">\n \t<li id=\"46da\" class=\"lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\"><code>API_KEY<\/code><\/strong>\u00a0\u2192 Placeholder for the API key (should be replaced with a real key).<\/li>\n \t<li id=\"9cef\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\"><code>BASE_URL<\/code><\/strong>\u00a0\u2192 Endpoint for Google Maps search results.<\/li>\n \t<li id=\"22b5\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\"><code>PLACES_URL<\/code><\/strong>\u00a0\u2192 Endpoint for fetching details of a specific place.<\/li>\n<\/ul>\n<p id=\"2043\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Making an API Request for Nearby Restaurants and Extracting the Search Results<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a47fb7 elementor-widget elementor-widget-code-highlight\" data-id=\"6a47fb7\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp>response = requests.get(f\"{BASE_URL}?ll=@51.5181901,-0.1525433,5z&query=Indian Restaurants Near The British Museum&api_key={API_KEY}\")\ndata = response.json()\n\nbusinesses = []\nfor place in data.get(\"search_results\", []):\n    title = place.get(\"title\")\n    place_id = place.get(\"place_id\")<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b661688 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"b661688\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul class=\"\"><li id=\"21f2\" class=\"lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Sends a\u00a0<strong class=\"lj fr\">GET request<\/strong>\u00a0to\u00a0<code class=\"cx ol om on od b\">BASE_URL<\/code>.<\/li><li id=\"2d12\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Initializes an empty list\u00a0<code class=\"cx ol om on od b\">businesses<\/code>\u00a0to store extracted data.<\/li><li id=\"2c05\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Loops through the\u00a0<strong class=\"lj fr\">search results<\/strong>\u00a0(list of restaurants) and extracts\u00a0<code class=\"cx ol om on od b\">title<\/code>(name of the restaurant) and\u00a0<code class=\"cx ol om on od b\">place_id<\/code>(unique identifier for each restaurant).<\/li><\/ul><h3 id=\"93d7\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Fetching Details for Each Restaurant<\/strong><\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b00530 elementor-widget elementor-widget-code-highlight\" data-id=\"7b00530\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp>try:\n    place_response = requests.get(f\"{PLACES_URL}?place_id={place_id}&api_key={API_KEY}\")\n    place_data = place_response.json()\n    popularity_scores = place_data.get(\"place_results\", {}).get(\"popular_times\", {}).get(\"graph_results\", {})\nexcept Exception as e:\n    print(f\"Error fetching details for {title}: {e}\")\n    popularity_scores = {}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a31f906 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"a31f906\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul class=\"\"><li id=\"1747\" class=\"lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Sends a second request<\/strong>\u00a0to\u00a0<code class=\"cx ol om on od b\">PLACES_URL<\/code>\u00a0using the extracted\u00a0<code class=\"cx ol om on od b\">place_id<\/code>\u00a0to fetch\u00a0<strong class=\"lj fr\">detailed information<\/strong>\u00a0about the restaurant.<\/li><li id=\"f091\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Extracts popularity data<\/strong>\u00a0(<code class=\"cx ol om on od b\">graph_results<\/code>) from the response.<\/li><li id=\"0049\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Handles errors<\/strong>\u00a0\u2192 If the request fails, prints an error message and assigns an\u00a0<strong class=\"lj fr\">empty dictionary<\/strong>\u00a0<code class=\"cx ol om on od b\">{}<\/code>\u00a0to\u00a0<code class=\"cx ol om on od b\">popularity_scores<\/code>.<\/li><\/ul><p id=\"2761\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">Finally, we fetched the details for each business in the\u00a0<code class=\"cx ol om on od b\">businesses<\/code>\u00a0array and saved the data into a JSON file.<\/p><p id=\"0027\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">You might be thinking what is\u00a0<code class=\"cx ol om on od b\">popularity_scores<\/code>\u00a0stored here? If you check out the\u00a0<a class=\"af ob\" href=\"https:\/\/docs.scrapingdog.com\/google-maps-api\/google-maps-places-api\" target=\"_blank\" rel=\"nofollow noopener\">Google Maps Places API<\/a>\u00a0at Scrapingdog, you will find the below response for each API call on a business. This is none other than popular times for a business on different weekdays.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-805f4f3 elementor-widget elementor-widget-code-highlight\" data-id=\"805f4f3\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-json line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-json\">\n\t\t\t\t\t<xmp>\"popular_times\": {\n            \"graph_results\": {\n                \"sunday\": [\n                    {\n                        \"time\": \"6 AM\",\n                        \"info\": \"\",\n                        \"busyness_score\": 0\n                    },\n                    {\n                        \"time\": \"7 AM\",\n                        \"info\": \"Usually not busy\",\n                        \"busyness_score\": 7\n                    },\n                    {\n                        \"time\": \"8 AM\",\n                        \"info\": \"Usually not busy\",\n                        \"busyness_score\": 18\n                    },\n                    {\n                        \"time\": \"9 AM\",\n                        \"info\": \"Usually not too busy\",\n                        \"busyness_score\": 37\n                    },\n                    {\n                        \"time\": \"10 AM\",\n                        \"info\": \"Usually not too busy\",\n                        \"busyness_score\": 39\n                    },\n                    {\n                        \"time\": \"11 AM\",\n                        \"info\": \"Usually not too busy\",\n                        \"busyness_score\": 37\n                    },\n                    {\n                        \"time\": \"12 PM\",\n                        \"info\": \"Usually not too busy\",\n                        \"busyness_score\": 27\n                    },\n                    {\n                        \"time\": \"1 PM\",\n                        \"info\": \"Usually not too busy\",\n                        \"busyness_score\": 30\n                    },\n                    {\n                        \"time\": \"2 PM\",\n                        \"info\": \"Usually not too busy\",\n                        \"busyness_score\": 48\n                    },\n                    {\n                        \"time\": \"3 PM\",\n                        \"info\": \"Usually a little busy\",\n                        \"busyness_score\": 51\n                    },\n                    {\n                        \"time\": \"4 PM\",\n                        \"info\": \"Usually not too busy\",\n                        \"busyness_score\": 43\n                    },\n                    {\n                        \"time\": \"5 PM\",\n                        \"info\": \"\",\n                        \"busyness_score\": 0\n                    },\n                    {\n                        \"time\": \"6 PM\",\n                        \"info\": \"\",\n                        \"busyness_score\": 0\n                    },\n                    {\n                        \"time\": \"7 PM\",\n                        \"info\": \"\",\n                        \"busyness_score\": 0\n                    },\n                    {\n                        \"time\": \"8 PM\",\n                        \"info\": \"\",\n                        \"busyness_score\": 0\n                    },\n                    {\n                        \"time\": \"9 PM\",\n                        \"info\": \"\",\n                        \"busyness_score\": 0\n                    },\n                    {\n                        \"time\": \"10 PM\",\n                        \"info\": \"\",\n                        \"busyness_score\": 0\n                    },\n                    {\n                        \"time\": \"11 PM\",\n                        \"info\": \"\",\n                        \"busyness_score\": 0\n                    }\n                ],\n             ....\n            }\n          }<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-752293f font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"752293f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Next, we will call this function and run our pipeline.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-981cd73 elementor-widget elementor-widget-code-highlight\" data-id=\"981cd73\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp>businesses = get_data()\ndf = prepare_heatmap_data(businesses)\nif not df.empty:\n    generate_heatmap(df)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4079e15 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"4079e15\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The\u00a0<code class=\"cx ol om on od b\">prepare_heatmap_data<\/code>\u00a0and\u00a0<code class=\"cx ol om on od b\">generate_heatmap<\/code>\u00a0data will help us in organizing the data for heatmap and generating the graphic respectively.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f36d81 elementor-widget elementor-widget-code-highlight\" data-id=\"4f36d81\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp>def normalize_hour_string(hour):\n    # Replace non-breaking spaces and standardize to the format used in 'columns'\n    return hour.replace('\\u202f', ' ').strip()\n\ndef prepare_heatmap_data(businesses):\n    columns = [\"6 AM\", \"7 AM\", \"8 AM\", \"9 AM\", \"10 AM\", \"11 AM\", \"12 PM\", \"1 PM\", \"2 PM\", \"3 PM\", \"4 PM\", \"5 PM\", \"6 PM\", \"7 PM\", \"8 PM\", \"9 PM\", \"10 PM\", \"11 PM\", \"12 AM\", \"1 AM\", \"2 AM\", \"3 AM\", \"4 AM\", \"5 AM\"]\n    heatmap_data = []\n    \n    for business in businesses:\n        title = business[\"title\"]\n        daily_scores = {hour: [] for hour in columns}  # Initialize all hours with empty lists\n\n        for day, hours in business[\"popularity_scores\"].items():\n            for hour_data in hours:\n                hour_index = normalize_hour_string(hour_data['time'])\n                if 'busyness_score' in hour_data:\n                    daily_scores[hour_index].append(hour_data['busyness_score'])\n\n        # Calculate the average popularity per hour across the week or fill with zero\n        daily_avg = [(sum(scores) \/ len(scores) if scores else 0) for scores in daily_scores.values()]\n        heatmap_data.append({\"business\": title, **dict(zip(columns, daily_avg))})\n\n    return pd.DataFrame(heatmap_data)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-14fd166 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"14fd166\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4 id=\"ba75\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Step-by-step explanation<\/strong><\/h4><ul class=\"\"><li id=\"cbd9\" class=\"lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Normalize Hour Strings<\/strong>:\u00a0<strong class=\"lj fr\">Replaces<\/strong>\u00a0non-breaking spaces (<code class=\"cx ol om on od b\">\\u202f<\/code>) in hour strings.<\/li><\/ul><h3 id=\"6857\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Prepare Heatmap Data:<\/strong><\/h3><ul class=\"\"><li id=\"a01c\" class=\"lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Defines hourly time slots<\/strong> (6 AM \u2014 5 AM the next day).<\/li><li id=\"0cf2\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Initializes\u00a0<code class=\"cx ol om on od b\">heatmap_data<\/code>\u00a0list to store processed business popularity scores.<\/li><li id=\"05ab\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Loops through each business.<\/li><li id=\"54f0\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Initializes an empty list for each hour<\/strong>\u00a0to store multiple days\u2019 data.<\/li><li id=\"6ec9\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Iterates through popularity scores and\u00a0<strong class=\"lj fr\">appends busyness values<\/strong>\u00a0for each hour.<\/li><li id=\"decf\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Computes\u00a0<strong class=\"lj fr\">average busyness<\/strong>\u00a0per hour.<\/li><li id=\"c18d\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Converts the result into a\u00a0<strong class=\"lj fr\">Pandas DataFrame<\/strong>.<\/li><\/ul><p id=\"de46\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">Finally, we generate the heatmap.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-218bada elementor-widget elementor-widget-code-highlight\" data-id=\"218bada\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp># Generate heatmap\ndef generate_heatmap(df):\n    plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']  # for unicode characters\n    plt.rcParams['axes.unicode_minus'] = False  # for minus sign characters\n    columns = [\"6 AM\", \"7 AM\", \"8 AM\", \"9 AM\", \"10 AM\", \"11 AM\", \"12 PM\", \"1 PM\", \"2 PM\", \"3 PM\", \"4 PM\", \"5 PM\", \"6 PM\", \"7 PM\", \"8 PM\", \"9 PM\", \"10 PM\", \"11 PM\", \"12 AM\", \"1 AM\", \"2 AM\", \"3 AM\", \"4 AM\", \"5 AM\"]\n    heat_data = df.set_index(\"business\").reindex(columns=columns)\n\n    plt.figure(figsize=(15, 8))\n    sns.heatmap(heat_data, cmap='YlOrRd', annot=True, fmt=\".0f\", linewidths=.5)\n    plt.title('Popularity by Hour')\n    plt.xlabel('Hour of Day')\n    plt.ylabel('Business')\n    plt.xticks(rotation=45)\n    plt.tight_layout()\n    plt.savefig(\"heatmap.png\")\n    plt.show()<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1bd7a0d font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"1bd7a0d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4 id=\"9dbb\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Step-by-step explanation:<\/strong><\/h4><ul class=\"\"><li id=\"519b\" class=\"lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Sets up Matplotlib<\/strong>\u00a0for Unicode support.<\/li><li id=\"3cf9\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Formats DataFrame<\/strong>\u00a0for heatmap plotting.<\/li><li id=\"721d\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Creates the heatmap<\/strong>\u00a0with Seaborn.<\/li><li id=\"b635\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\">Uses\u00a0<strong class=\"lj fr\">\u2018YlOrRd\u2019<\/strong>\u00a0color gradient (yellow-to-red).<\/li><li id=\"49e2\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Annotates heatmap cells<\/strong>\u00a0with numerical values.<\/li><li id=\"ff8a\" class=\"lh li fq lj b lk nw lm ln lo nx lq lr ls ny lu lv lw nz ly lz ma oa mc md me nt nu nv bk\" data-selectable-paragraph=\"\"><strong class=\"lj fr\">Saves the heatmap as an image<\/strong>\u00a0(<code class=\"cx ol om on od b\">heatmap.png<\/code>).<\/li><\/ul><p id=\"1610\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">Running this program will give you the following heatmap.<\/p><p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*-PJhgtKbzqmg56g8BJKQHg.png\" \/><\/p><p id=\"5a03\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">Similarly, you can run the programs for other queries also.<\/p><h4 id=\"e122\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">French Bistros<\/strong><\/h4><p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*SjwuKrPEbj5SAv8Zddm-xg.png\" \/><\/p><h4 id=\"c813\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Cafes<\/strong><\/h4><p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*ZgJzlFKOBVBN66033nDzlA.png\" \/><\/p><p id=\"cee0\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">Most of these cafes peak near lunchtime.<\/p><h4 id=\"97d4\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Art Galleries and Museums<\/strong><\/h4><p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*mvPty8PWRUNFA-tEcODDBA.png\" \/><\/p><h4 id=\"be34\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Pubs and Bars<\/strong><\/h4><p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*A0wpPIer8l3w9zkqzYZ53Q.png\" \/><\/p><h4 id=\"9af3\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\"><strong class=\"lj fr\">Theatres and Entertainment Venues<\/strong><\/h4><p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1400\/1*1KBriRL6YL7_SIZiiWZqHg.png\" \/><\/p><p data-selectable-paragraph=\"\">\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a603004 elementor-widget elementor-widget-heading\" data-id=\"a603004\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e6fc509 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"e6fc509\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p id=\"2fa1\" class=\"pw-post-body-paragraph lh li fq lj b lk na lm ln lo nb lq lr ls nc lu lv lw nd ly lz ma ne mc md me fj bk\" data-selectable-paragraph=\"\">Google Maps generates interesting data on businesses that can be used for creating studies and research.<\/p><p id=\"9e8e\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">In this article, we analyzed the popular times for various businesses in London using <a href=\"https:\/\/www.scrapingdog.com\/google-maps-api\/\" target=\"_blank\" rel=\"noopener\">Scrapingdog Google Maps API<\/a>. I hope you found it helpful! If you did, please consider sharing it on social media.<\/p><p data-selectable-paragraph=\"\">If you want to analyze free local business data, you can use <a href=\"https:\/\/www.scrapingdog.com\/free-local-leads-extraction-tool\/\" target=\"_blank\" rel=\"noopener\">this tool<\/a>, extract 20 local businesses&#8217; data from a location.<\/p><p id=\"bd2e\" class=\"pw-post-body-paragraph lh li fq lj b lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me fj bk\" data-selectable-paragraph=\"\">Thanks for reading! \ud83d\udc4b<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cd7c4c6 elementor-widget elementor-widget-heading\" data-id=\"cd7c4c6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Additional Resources<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ad18759 font-color-green elementor-widget elementor-widget-text-editor\" data-id=\"ad18759\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><a href=\"https:\/\/www.scrapingdog.com\/blog\/automating-scraping-summarizing-google-scholar-articles-using-python-openai\/\" target=\"_blank\" rel=\"noopener\">Automating Scraping &amp; Summarizing Research Paper with Python &amp; OpenAI<\/a><\/li><li><a href=\"https:\/\/www.scrapingdog.com\/blog\/competitor-sentiment-analysis-for-local-business-using-scrapingdog-google-maps-and-reviews-api\/\" target=\"_blank\" rel=\"noopener\">Automating Competitor Analysis for Local Businesses using Google Maps &amp; Reviews API<\/a><\/li><li><a href=\"https:\/\/www.scrapingdog.com\/blog\/should-you-move-to-new-york-reddit-analysis\/\" target=\"_blank\" rel=\"noopener\">Should You Move To New York &#8211; We Scraped Subreddits to Analyze<\/a><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>In this read, we have scraped popular times data from Google Maps to see how the businesses get footfall near British Museum London. <\/p>\n","protected":false},"author":4,"featured_media":21810,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[25],"tags":[],"class_list":["post-21801","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/posts\/21801","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/comments?post=21801"}],"version-history":[{"count":0,"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/posts\/21801\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/media\/21810"}],"wp:attachment":[{"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/media?parent=21801"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/categories?post=21801"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scrapingdog.com\/wp-json\/wp\/v2\/tags?post=21801"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}