Я пытаюсь получить широту и долготу адреса, используя запрос на получение, но у меня с этим проблемы.
Адрес формируется из названия улицы, номера и сектора города. В данном случае название улицы — Hernando de Magallanes
, номер — 958
, а сектор — Las Condes
.
Мой код выглядит следующим образом:
import requests
from bs4 import BeautifulSoup as soup
url = "https://www.google.cl/maps/place/Hernando+de+Magallanes+958,+Las+Condes"
resp=requests.request(method = "GET",url=url)
soup_parser = soup(resp.text, "html.parser")
Часть, которую я ищу, находится под сценарием, который находится под тегом hmtl.
html_content = soup_parser.html.contents[1]
_script = html_content.find_all("script")[7]
Глядя на _script
, есть огромное количество текста, но часть, которую я ищу, — это URL-адрес https
, который находится здесь:
.... uPfjZVD6AEAACAAAAADAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\",null,null,[[[1,0]\n]\n,1,null,0,0]\n]\n,null,\"Hernando de Magallanes 958, Las Condes, Región Metropolitana\",null,null,\"https://www.google.cl/maps/preview/place/Hernando+de+Magallanes+958,+Las+Condes,+Regi%C3%B3n+Metropolitana/@-33.4164174,-70.5598746,3330a,13.1y/data\\u003d!4m2!3m1!1s0x9662ceef18131219:0x3bab969f4e95bd4e\",1,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1,null,null,null,null,null,null,null,0,[[[\"W2vSX-_FKMv39QOpipUw\",\"0ahUKEwiv3531h8TtAhXLe30KHSlFBQYQwlUIGCgAMAA\",[\"Hernando d ....
В частности, я ищу два числа рядом с @
-> -33.4164174,-70.5598746
.
Как я могу получить эти координаты? Кроме того, я думаю сделать это для кучи других адресов. Есть ли дневная квота на эти запросы?
Попробуйте этот фрагмент кода и измените его соответствующим образом? (Не зная точно, каковы ваши критерии поиска и пример кода, просто возьмите это как образец).
from requests import get
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',}
response = get("https://www.google.com/search?q=latitude+longitude+of+75270+postal+code+paris+france",headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
a = soup.find("div", class_= "Z0LcW").text
print(a)
Выход:
48.8573° N, 2.3370° E
Используйте регулярное выражение re
. и используйте шаблон.
import requests
from bs4 import BeautifulSoup as soup
import re
url = "https://www.google.cl/maps/place/Hernando+de+Magallanes+958,+Las+Condes"
resp=requests.request(method = "GET",url=url)
soup_parser = soup(resp.text, "html.parser")
html_content = soup_parser.html.contents[1]
_script = html_content.find_all("script")[7]
matches=re.findall("(-\d+\.\d{7})",_script.text)
print(matches[0],matches[1])
Вам нужно просмотреть исходный код страницы и разобрать window.APP_INITIALIZATION_STATE
блок переменных с помощью регулярного выражения, там вы найдете все необходимые данные. Или вместо этого вы можете использовать автоматизацию браузера, такую как драматург или селен, но это будет медленнее.
Вы также можете использовать API Карт Google от SerpApi. Это платный API с бесплатным планом для тестирования.
Код для интеграции:
import os
from serpapi import GoogleSearch
params = {
"engine": "google_maps",
"type": "search",
"q": "Hernando de Magallanes 958 Las Condes",
"ll": "@40.7455096,-74.0083012,14z",
"google_domain": "google.com",
"api_key": os.getenv("API_KEY") # https://docs.python.org/3/library/os.html#os.getenv
}
search = GoogleSearch(params)
results = search.get_dict()
coordinates = results["place_results"]["gps_coordinates"]
latitude = coordinates['latitude']
longitude = coordinates['longitude']
print(f"Latitude: {latitude}\nLongitude: {longitude}")
Выход:
Latitude: -33.4164174
Longitude: -70.5598746
Отказ от ответственности, я работаю в SerpApi.
Привет, спасибо за ваш ответ! Я добавил некоторые детали адреса и названия улиц. Кроме того, добавлен URL-адрес, который я использую (я забыл добавить его при написании вопроса). Что касается примера кода, то то, что я опубликовал, в значительной степени соответствует тому, что у меня есть на данный момент. Я пытаюсь понять, как получить широту и долготу указанного адреса, а затем я хотел бы воспроизвести то же самое для других адресов.