Skip to content

Instantly share code, notes, and snippets.

@Naedri
Last active May 16, 2023 21:14
Show Gist options
  • Save Naedri/a304641b58613c952034dc22fc9dd7ac to your computer and use it in GitHub Desktop.
Save Naedri/a304641b58613c952034dc22fc9dd7ac to your computer and use it in GitHub Desktop.
To parse places from a google maps list into a .geojson file powered by OSM, with ordered and linked points.
#!/bin/bash
# This script executes the four Python files sequentially to perform a series of tasks.
# Make sure you have Python installed and the necessary dependencies for each Python script.
# pip install -r requirements.txt
# Step 1: Convert maps to JSON
python 01_maps_to_json.py --address_suffix ", Krakow"
# Step 2: Convert JSON to GeoJSON
python 02_json_to_geojson.py
# Step 3: Order points
python 03_order_points.py
# Step 4: Add lines between points
python 04_add_lines.py
import argparse
import json
from bs4 import BeautifulSoup
def extract_data_from_html(html_file, parent_class, name_tag, address_class):
"""
Extracts data from an HTML file based on the specified tags and classes.
Args:
html_file (str): The path to the HTML file.
parent_class (str): The class name for the parent nodes.
name_tag (str): The tag name for the name element.
address_class (str): The class name for the address element.
Returns:
list: A list of dictionaries, each representing an extracted object with 'name' and 'address' attributes.
"""
with open(html_file, 'r') as f:
soup = BeautifulSoup(f, 'html.parser')
data = []
parent_nodes = soup.find_all('div', class_=parent_class)
for parent_node in parent_nodes:
name_element = parent_node.find(name_tag)
name = name_element.text.strip() if name_element else ''
address_element = parent_node.find('span', class_=address_class)
address = address_element.text.strip() if address_element else ''
entry = {'name': name, 'address': address}
data.append(entry)
return data
def find_address_node(parent_node, address_class):
"""
Finds the address node within the common ancestor of the parent node and the address elements.
Args:
parent_node (bs4.element.Tag): The parent node representing the name element.
address_class (str): The class name of the address element.
Returns:
bs4.element.Tag: The address node, or None if not found.
"""
# Find the common ancestor of the name and address elements
common_ancestor = parent_node.find_parent()
# Find the address node within the common ancestor
address_node = common_ancestor.find('span', class_=address_class)
return address_node
def append_string_to_attribute(json_array, attribute, string_to_append):
"""
Appends a string to a given attribute in a JSON array of objects.
Args:
json_array (list): JSON array of objects.
attribute (str): Attribute name to append the string to.
string_to_append (str): String to append to the attribute.
Returns:
list: Updated JSON array with the string appended to the attribute.
"""
for obj in json_array:
if attribute in obj:
obj[attribute] += string_to_append
return json_array
def main():
parser = argparse.ArgumentParser(
description='Extract data from HTML file to JSON.',
usage='python 01_maps_to_json.py --html_file sample.html --parent_class myName --name_tag h2 --address_class myAddress --address_suffix ", my city"')
parser.add_argument('--html_file', type=str, default='maps.html',
help='Path to the HTML file (default: maps.html)')
parser.add_argument('--parent_class', type=str, default='WHf7fb',
help='Class name for the parent nodes (default: WHf7fb)'),
parser.add_argument('--name_tag', type=str, default='h3',
help='Tag for the name element (default: h3)')
parser.add_argument('--address_class', type=str, default='fKEVAc',
help='Class for the address element (default: fKEVAc)')
parser.add_argument('--address_suffix', type=str, default="None",
help='To be added at the end of the address, (default: None)')
args = parser.parse_args()
html_file = args.html_file
address_suffix = args.address_suffix
extracted_data = extract_data_from_html(
args.html_file, args.parent_class, args.name_tag, args.address_class)
# Add potential address_suffix
if address_suffix is not None:
extracted_data = append_string_to_attribute(
extracted_data, 'address', address_suffix)
# Save JSON data to a file
# Append .json extension to the base name
output_file = html_file.replace(".html", ".json")
with open(output_file, 'w') as f:
json.dump(extracted_data, f, indent=4)
print(f"Data successfully saved to '{output_file}'.")
if __name__ == '__main__':
main()
import argparse
import json
import requests
def geocode_address(address):
"""
Geocodes an address using the OpenStreetMap API and returns the coordinates.
Args:
address (str): The address to geocode.
Returns:
tuple: A tuple containing the latitude and longitude coordinates.
"""
url = f'https://nominatim.openstreetmap.org/search?q={address}&format=json'
response = requests.get(url)
data = response.json()
if data:
latitude = float(data[0]['lat'])
longitude = float(data[0]['lon'])
return latitude, longitude
else:
return None, None
def generate_geojson(json_file):
"""
Reads the content of a JSON file, queries the OpenStreetMap API to obtain coordinates,
and generates a GeoJSON file with the coordinates.
Args:
json_file (str): The path to the input JSON file.
"""
with open(json_file, 'r') as f:
data = json.load(f)
features = []
for item in data:
name = item['name']
address = item['address']
latitude, longitude = geocode_address(address)
if latitude is not None and longitude is not None:
feature = {
'type': 'Feature',
'properties': {
'name': name,
'address': address
},
'geometry': {
'type': 'Point',
'coordinates': [longitude, latitude]
}
}
features.append(feature)
return {
'type': 'FeatureCollection',
'features': features
}
def main():
parser = argparse.ArgumentParser(
description='Generate GeoJSON file from a JSON file containing name and address data')
parser.add_argument('--json_file', type=str, default='maps.json',
help='Path to the input JSON file')
args = parser.parse_args()
json_file = args.json_file
geojson = generate_geojson(json_file)
# Save JSON data to a file
# Append .json extension to the base name
output_file = json_file.replace(".json", ".geojson")
with open(output_file, 'w') as f:
json.dump(geojson, f, indent=4)
print(f"Data successfully saved to '{output_file}'.")
if __name__ == '__main__':
main()
import argparse
import json
import geopy.distance
import networkx as nx
def load_geojson(file):
"""
Load a GeoJSON file and return the data.
Args:
file (str): Path to the GeoJSON file.
Returns:
dict: The loaded GeoJSON data.
"""
with open(file) as f:
data = json.load(f)
return data
def calculate_distances(points):
"""
Calculate distances between all pairs of points.
Args:
points (list): List of points with coordinates and properties.
Returns:
dict: Dictionary containing distances between each pair of points.
"""
distances = {}
for i in range(len(points)):
for j in range(i + 1, len(points)):
distances[(i, j)] = geopy.distance.distance(
points[i][0], points[j][0]).km
return distances
def create_graph(points, distances):
"""
Create a graph from the points and distances.
Args:
points (list): List of points with coordinates and properties.
distances (dict): Dictionary containing distances between each pair of points.
Returns:
networkx.Graph: The created graph.
"""
G = nx.Graph()
G.add_nodes_from(range(len(points)))
G.add_weighted_edges_from([(i, j, distances[(i, j)]) for i in range(
len(points)) for j in range(i + 1, len(points))])
return G
def find_shortest_path(graph, source):
"""
Find the shortest path in the graph starting from the given source node.
Args:
graph (networkx.Graph): The graph.
source (int): The source node.
Returns:
list: The shortest path.
"""
path = nx.shortest_path(graph, source=source, weight='weight')
return path
def order_points(points, path):
"""
Order the points based on the shortest path and add "order" field to properties.
Args:
points (list): List of points with coordinates and properties.
path (list): The shortest path.
Returns:
list: The ordered points with updated properties.
"""
ordered_points = [
(points[i][0], {**points[i][1], "order": idx + 1}) for idx, i in enumerate(path)]
return ordered_points
def main():
parser = argparse.ArgumentParser(
description='Order points in a GeoJSON file based on shortest path')
parser.add_argument('--input_file', type=str, default='maps.geojson',
help='Path to the input GeoJSON file')
args = parser.parse_args()
input_file = args.input_file
# Load GeoJSON file
data = load_geojson(input_file)
# Extract list of points and their existing properties
points = [(tuple(feature['geometry']['coordinates']), feature['properties'])
for feature in data['features']]
# Set starting point (can be any point in the list)
start = points[0][0]
# Calculate distances between all pairs of points
distances = calculate_distances(points)
# Create graph
graph = create_graph(points, distances)
# Find shortest path
path = find_shortest_path(graph, source=0)
# Order points based on shortest path and add "order" field to properties
ordered_points = order_points(points, path)
# Create new GeoJSON file with ordered points and their existing properties
output_data = {
"type": "FeatureCollection",
"features": []
}
for point in ordered_points:
feature = {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": point[0]
},
"properties": point[1]
}
output_data['features'].append(feature)
# Save JSON data to a file
# Append .json extension to the base name
output_file = input_file.replace(".geojson", "_ordered.geojson")
with open(output_file, 'w') as f:
json.dump(output_data, f)
print(f"Data successfully saved to '{output_file}'.")
if __name__ == '__main__':
main()
import argparse
import json
def add_lines_to_geojson(geojson_data):
"""
Add lines between ordered points in a GeoJSON file.
Args:
geojson_data (dict): GeoJSON data as a dictionary.
Returns:
dict: Modified GeoJSON data with lines added.
"""
features = geojson_data["features"]
line_string_coordinates = []
# Add the coordinates of each point to a list to create lines between the points
for i in range(len(features) - 1):
current_coords = features[i]["geometry"]["coordinates"]
next_coords = features[i+1]["geometry"]["coordinates"]
line_string_coordinates.append(current_coords)
line_string_coordinates.append(next_coords)
# Create a LineString feature with the coordinates of the lines
line_string = {
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": line_string_coordinates
}
}
# Add the LineString feature to the collection of features
features.append(line_string)
return geojson_data
def main():
"""
Main function to add lines between ordered points in a GeoJSON file.
The function reads the input GeoJSON file containing ordered points and creates
a LineString feature connecting those points. The LineString feature is added
to the collection of features in the GeoJSON file.
Usage: python script.py input_file.geojson
Args:
input_file (str): Path to the input GeoJSON file.
"""
parser = argparse.ArgumentParser(
description='Add lines between ordered points in a GeoJSON file')
parser.add_argument('--input_file', type=str, default='maps_ordered.geojson',
help='Path to the input GeoJSON file')
args = parser.parse_args()
input_file = args.input_file
# Load the input GeoJSON file
with open(input_file, "r") as f:
geojson_data = json.load(f)
# Add lines to the GeoJSON data
modified_geojson_data = add_lines_to_geojson(geojson_data)
# Save the modified GeoJSON file
output_file = input_file.replace(".geojson", "_with_lines.geojson")
with open(output_file, "w") as f:
json.dump(modified_geojson_data, f)
print(f"Data successfully saved to '{output_file}'.")
if __name__ == '__main__':
main()
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Lody Rinnela"
data-result-index="0"
data-section-id="12__fid:0x47165b26ad1cbec3:0x5b71b65d2745ac19"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJQXlnQSIsbnVsbCwwXQ=="
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Lody Rinnela</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,7&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,7</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd LvtBRd"></li></ol></span
><span class="ciA11e" aria-label="21&nbsp;avis"
>(21)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span></span>Glace <span aria-hidden="true">·</span>
<span class="fKEVAc">Floriańska 12</span>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipNGtOEApWodqPzBM7czf9LBuvXzkcyB-ncUOcab=w80-h142-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJVkNnQSJd"
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc">
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Achats en magasin"
role="text"
style="font-weight: 400"
>Achats en magasin</span
>
</div>
</div>
<div class="Q4BGF"></div>
</div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle13"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Camelot Cafe"
data-result-index="1"
data-section-id="12__fid:0x47165b11df44cb15:0x24c81acf0440cdeb"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJWUNnQSIsbnVsbCwxXQ=="
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Camelot Cafe</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,5&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,5</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd LvtBRd"></li></ol></span
><span class="ciA11e" aria-label="3 157&nbsp;avis"
>(3 157)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span aria-label="Prix: Abordable">$$</span>
<span aria-hidden="true">·</span> Café
<span aria-hidden="true">·</span>
<span class="fKEVAc">Świętego Tomasza 17</span>
</div>
<div class="wpNPMc">
<span class="zXFjbb">
<span
><span style="font-weight: 400; color: rgba(217, 48, 37, 1)"
>Fermé</span
><span style="font-weight: 400"> ⋅ Ouvre à 09:00 mar.</span></span
></span
>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipPsxg1kPtAFEWP67Ds18Ch2JCC_a9s__hQub_oS=w80-h106-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJd1FFb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc">
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Repas sur place"
role="text"
style="font-weight: 400"
>Repas sur place</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Aucune livraison"
role="text"
style="font-weight: 400"
>Aucune livraison</span
>
</div>
</div>
<div class="Q4BGF"></div>
</div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle14"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Piwnica Pod Baranami"
data-result-index="2"
data-section-id="12__fid:0x47165b0ddc1d0f97:0x4e9ee563e7699ca8"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJekFFb0FBIixudWxsLDJd"
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Piwnica Pod Baranami</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,8&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,8</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li></ol></span
><span class="ciA11e" aria-label="3 354&nbsp;avis"
>(3 354)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span aria-label="Prix: Abordable">$$</span>
<span aria-hidden="true">·</span> Bar à cocktails
<span aria-hidden="true">·</span>
<span class="fKEVAc">Pałac Pod Baranami, Rynek Główny 27</span>
</div>
<div class="wpNPMc">
<span class="zXFjbb">
<span
><span style="font-weight: 400; color: rgba(176, 96, 0, 1)"
>Ferme bientôt</span
><span style="font-weight: 400">
⋅ 00:00 ⋅ Ouvre à 11:00 mar.</span
></span
></span
>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipOA5uFQ0sFXU8USFiqEUh_haDgFzzINdPSR79F_=w163-h92-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJcndJb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc">
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Repas sur place"
role="text"
style="font-weight: 400"
>Repas sur place</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Aucun plat à emporter"
role="text"
style="font-weight: 400"
>Aucun plat à emporter</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Aucune livraison"
role="text"
style="font-weight: 400"
>Aucune livraison</span
>
</div>
</div>
<div class="Q4BGF"></div>
</div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle15"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Mines de sel de Wieliczka"
data-result-index="3"
data-section-id="12__fid:0x471643d805818e4b:0x972549aefd93b415"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJdWdJb0FBIixudWxsLDNd"
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Mines de sel de Wieliczka</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,6&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,6</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd LvtBRd"></li></ol></span
><span class="ciA11e" aria-label="21 294&nbsp;avis"
>(21 294)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span></span>Lieu historique <span aria-hidden="true">·</span>
<span class="fKEVAc">Daniłowicza 10</span>
</div>
<div class="tSVUtf">
<div class="KPxkLd">
<span>Chapelles, chambres et lacs souterrains</span>
</div>
</div>
<div class="wpNPMc">
<span class="zXFjbb">
<span
><span style="font-weight: 400; color: rgba(217, 48, 37, 1)"
>Fermé</span
><span style="font-weight: 400"> ⋅ Ouvre à 08:30 mar.</span></span
></span
>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipPfwRktqZNvlM0LAuYPuEKeDJuBpG64D_DcNyKX=w122-h92-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJbWdNb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc"><div class="Q4BGF"></div></div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle16"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Janina R B since 1902"
data-result-index="4"
data-section-id="12__fid:0x47165b125e591d9d:0xef12ee39c533959b"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJcGdNb0FBIixudWxsLDRd"
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Janina R B since 1902</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,4&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,4</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd LvtBRd"></li></ol></span
><span class="ciA11e" aria-label="63&nbsp;avis"
>(63)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span></span>Boutique d'accessoires de mode
<span aria-hidden="true">·</span>
<span class="fKEVAc">Miodowa 4, Józefa Dietla 45</span>
</div>
<div class="wpNPMc">
<span class="zXFjbb">
<span
><span style="font-weight: 400; color: rgba(217, 48, 37, 1)"
>Fermé</span
><span style="font-weight: 400"> ⋅ Ouvre à 10:00 mar.</span></span
></span
>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipMCzghNKoUJx8k-E5tOvrGdeaZ6chPIB0v50D3i=w204-h92-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJaUFRb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc">
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Achats en magasin"
role="text"
style="font-weight: 400"
>Achats en magasin</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Drive disponible"
role="text"
style="font-weight: 400"
>Drive disponible</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span aria-label="Livraison" role="text" style="font-weight: 400"
>Livraison</span
>
</div>
</div>
<div class="Q4BGF"></div>
</div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle17"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Bar Mleczny Flisak"
data-result-index="5"
data-section-id="12__fid:0x47165b739eb7b3b7:0x503bd030fc89f187"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJa3dRb0FBIixudWxsLDVd"
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Bar Mleczny Flisak</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,1&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,1</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd gMWVP"></li></ol></span
><span class="ciA11e" aria-label="911&nbsp;avis"
>(911)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span aria-label="Prix: Bon marché">$</span>
<span aria-hidden="true">·</span> Bar
<span aria-hidden="true">·</span>
<span class="fKEVAc">Tadeusza Kościuszki 1</span>
</div>
<div class="wpNPMc">
<span class="zXFjbb">
<span
><span style="font-weight: 400; color: rgba(217, 48, 37, 1)"
>Fermé</span
><span style="font-weight: 400"> ⋅ Ouvre à 10:00 mar.</span></span
></span
>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipM3erafXjohLB0ZbnJ2c2wK9dN9riQAEzws37Q6=w80-h106-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJOUFRb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc">
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Repas sur place"
role="text"
style="font-weight: 400"
>Repas sur place</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Vente à emporter"
role="text"
style="font-weight: 400"
>Vente à emporter</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Aucune livraison"
role="text"
style="font-weight: 400"
>Aucune livraison</span
>
</div>
</div>
<div class="Q4BGF"></div>
</div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle18"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Collegium Maius"
data-result-index="6"
data-section-id="12__fid:0x47165b0c32a892c7:0x74221849e13eb8f3"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJX3dRb0FBIixudWxsLDZd"
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Collegium Maius</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,7&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,7</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd LvtBRd"></li></ol></span
><span class="ciA11e" aria-label="646&nbsp;avis"
>(646)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span></span>Musée <span aria-hidden="true">·</span>
<span class="fKEVAc">Jagiellońska 15</span>
</div>
<div class="tSVUtf">
<div class="KPxkLd">
<span>Université du XIVe&nbsp;siècle avec un musée</span>
</div>
</div>
<div class="wpNPMc">
<span class="zXFjbb">
<span
><span style="font-weight: 400; color: rgba(217, 48, 37, 1)"
>Fermé</span
><span style="font-weight: 400"> ⋅ Ouvre à 10:00 mar.</span></span
></span
>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipMg3c90u9lxnXMjl9NhMbWglXNoC0_F9soGJZNa=w122-h92-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJM3dVb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc"><div class="Q4BGF"></div></div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle19"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Veganic Restaurant"
data-result-index="7"
data-section-id="12__fid:0x47165b09bc4bea63:0x8a1e36030bc28db5"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJNlFVb0FBIixudWxsLDdd"
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Veganic Restaurant</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,5&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,5</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd LvtBRd"></li></ol></span
><span class="ciA11e" aria-label="2 706&nbsp;avis"
>(2 706)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span aria-label="Prix: Abordable">$$</span>
<span aria-hidden="true">·</span> Végétalienne
<span aria-hidden="true">·</span>
<span class="fKEVAc">Karmelicka 34</span>
</div>
<div class="wpNPMc">
<span class="zXFjbb">
<span
><span style="font-weight: 400; color: rgba(217, 48, 37, 1)"
>Fermé</span
><span style="font-weight: 400"> ⋅ Ouvre à 09:00 mar.</span></span
></span
>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipN_3w_aACf9k-KjFXzLU_Dh5GHdHnsWYxHo2C3P=w122-h92-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJelFZb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc">
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Repas sur place"
role="text"
style="font-weight: 400"
>Repas sur place</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Drive disponible"
role="text"
style="font-weight: 400"
>Drive disponible</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Livraison sans contact"
role="text"
style="font-weight: 400"
>Livraison sans contact</span
>
</div>
</div>
<div class="Q4BGF"></div>
</div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle20"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Zamek Wawel"
data-result-index="8"
data-section-id="12__fid:0x47165b45e0da252b:0x3205e8355f8c7cfe"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJMmdZb0FBIixudWxsLDhd"
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Zamek Wawel</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,6&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,6</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd LvtBRd"></li></ol></span
><span class="ciA11e" aria-label="108&nbsp;avis"
>(108)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span></span>Site historique <span aria-hidden="true">·</span>
<span class="fKEVAc">Zamek Wawel</span>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipNtVq6qM1Z6WvLmdHm9DvNTgW2TUFgBLIWptSBG=w80-h106-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJcVFjb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc"><div class="Q4BGF"></div></div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle21"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div class="m6QErb" style="">
<div
role="link"
tabindex="0"
jsaction="pane.resultSection.click; clickmod:pane.resultSection.clickmod; keydown:pane.resultSection.keydown; mouseover:pane.resultSection.in; mouseout:pane.resultSection.out; focus:pane.resultSection.focusin; blur:pane.resultSection.focusout"
class="WHf7fb"
aria-label="Tbilisuri Restaurant"
data-result-index="9"
data-section-id="12__fid:0x47165b6a3189ac8d:0x664b4dcd74216189"
jslog="39539; track:click,contextmenu; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1E4QmNJdEFjb0FBIixudWxsLDld"
>
<div class="PXnPJd"></div>
<div class="IMSio">
<div class="l1KL8d">
<div class="fhISve">
<div class="sjJZ6b">
<div class="P2De3b">
<h3 class="kiaEld"><span>Tbilisuri Restaurant</span></h3>
<div class="section-subtitle-extension"></div>
<span
><span
><span aria-label="4,6&nbsp;étoiles"
><span class="U8T7xe" aria-hidden="true">4,6</span>
<ol class="U6stEc">
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd"></li>
<li class="HFPZDd LvtBRd"></li></ol></span
><span class="ciA11e" aria-label="2 316&nbsp;avis"
>(2 316)</span
></span
></span
>
</div>
</div>
<div></div>
</div>
<div class="zTNHUc">
<span aria-label="Prix: Abordable">$$</span>
<span aria-hidden="true">·</span> Géorgienne
<span aria-hidden="true">·</span>
<span class="fKEVAc">Beera Meiselsa 5</span>
</div>
<div class="tSVUtf">
<div class="KPxkLd">
<span>Restaurant simple, cuisine géorgienne classique</span>
</div>
</div>
<div class="wpNPMc">
<span class="zXFjbb">
<span
><span style="font-weight: 400; color: rgba(217, 48, 37, 1)"
>Fermé</span
><span style="font-weight: 400"> ⋅ Ouvre à 13:00 mar.</span></span
></span
>
</div>
<div class="hLLQde"></div>
</div>
<div class="R4GW7c">
<div
class="AyApzc"
style="
background-image: url('https://lh5.googleusercontent.com/p/AF1QipNw7gWG_l-UwNlcIZnIGH69hB8yZuOk7WX-hT1Y=w122-h92-k-no');
"
jslog="25178; mutable:true;metadata:WyIwYWhVS0V3aUIzdmVIcWZqLUFoWFB3b3NLSFdDOEF5Y1F6Q2NJbFFnb0FBIl0="
></div>
</div>
</div>
<div class="RnWEQ"></div>
<div class="xwpDKc n8sPKe">
<div class="Ahnjwc">
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Repas sur place"
role="text"
style="font-weight: 400"
>Repas sur place</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span
aria-label="Vente à emporter"
role="text"
style="font-weight: 400"
>Vente à emporter</span
>
</div>
<span class="M4A5Cf" aria-hidden="true">·</span>
</div>
<div class="W6VQef">
<div class="ah5Ghc">
<span aria-label="Livraison" role="text" style="font-weight: 400"
>Livraison</span
>
</div>
</div>
<div class="Q4BGF"></div>
</div>
</div>
<div class="A4whae"></div>
<div class="Oupsib"></div>
</div>
<div class="m6QErb" style="padding-left: 24px">
<div class="">
<button
class="M77dve"
aria-label="Ajouter un commentaire"
jslog="102833;track:click;mutable:true;"
jsaction="pane.wfvdle22"
>
<div class="BgrMEd mRai6b cYlvTc VOgY4">
<div class="OyjIsf zemfqc"></div>
<span class="wNNZR fontTitleSmall">Ajouter un commentaire</span>
</div>
</button>
</div>
</div>
</div>
<div role="presentation" class="qCHGyb ipilje" style="height: 0px"></div>
<div></div>
[
{
"name": "Lody Rinnela",
"address": "Floria\u0144ska 12, Krakow"
},
{
"name": "Camelot Cafe",
"address": "\u015awi\u0119tego Tomasza 17, Krakow"
},
{
"name": "Piwnica Pod Baranami",
"address": "Pa\u0142ac Pod Baranami, Rynek G\u0142\u00f3wny 27, Krakow"
},
{
"name": "Mines de sel de Wieliczka",
"address": "Dani\u0142owicza 10, Krakow"
},
{
"name": "Janina R B since 1902",
"address": "Miodowa 4, J\u00f3zefa Dietla 45, Krakow"
},
{
"name": "Bar Mleczny Flisak",
"address": "Tadeusza Ko\u015bciuszki 1, Krakow"
},
{
"name": "Collegium Maius",
"address": "Jagiello\u0144ska 15, Krakow"
},
{
"name": "Veganic Restaurant",
"address": "Karmelicka 34, Krakow"
},
{
"name": "Zamek Wawel",
"address": "Zamek Wawel, Krakow"
},
{
"name": "Tbilisuri Restaurant",
"address": "Beera Meiselsa 5, Krakow"
}
]
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
argparse==1.4.0
beautifulsoup4==4.11.2
geopy==2.3.0
networkx==3.1o
requests==2.30.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment