Как получить широту и долготу из адреса, очищающего карты Google?

Я пытаюсь получить широту и долготу адреса, используя запрос на получение, но у меня с этим проблемы.

Адрес формируется из названия улицы, номера и сектора города. В данном случае название улицы — 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.

Как я могу получить эти координаты? Кроме того, я думаю сделать это для кучи других адресов. Есть ли дневная квота на эти запросы?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 782
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте этот фрагмент кода и измените его соответствующим образом? (Не зная точно, каковы ваши критерии поиска и пример кода, просто возьмите это как образец).

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

Привет, спасибо за ваш ответ! Я добавил некоторые детали адреса и названия улиц. Кроме того, добавлен URL-адрес, который я использую (я забыл добавить его при написании вопроса). Что касается примера кода, то то, что я опубликовал, в значительной степени соответствует тому, что у меня есть на данный момент. Я пытаюсь понять, как получить широту и долготу указанного адреса, а затем я хотел бы воспроизвести то же самое для других адресов.

Pedro Pablo Severin Honorato 11.12.2020 02:35
Ответ принят как подходящий

Используйте регулярное выражение 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.

Другие вопросы по теме