Очистите широту и долготу с сайта

Я хочу преобразовать список почтовых индексов в DataFrame широты и долготы, используя данные с этого веб-сайта: Бесплатные инструменты карты.

https://www.freemaptools.com/convert-us-zip-code-to-lat-lng.htm#google_vignette

Вот мой код, но он не возвращает данные о широте и долготе. Как я могу его улучшить?

import requests
from bs4 import BeautifulSoup

def get_lat_lng(zip_code):
    # URL of the form processing page
    url = 'https://www.freemaptools.com/convert-us-zip-code-to-lat-lng.htm'
    
    # Create a session to handle cookies and headers
    session = requests.Session()
    
    # Send a GET request to get the initial form and any hidden data
    response = session.get(url)
    response.raise_for_status()
    
    # Parse the page with BeautifulSoup
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # Find form data (if needed)
    # Note: The actual form data extraction depends on how the website is structured
    # For simplicity, assume there's no hidden form data to worry about
    
    # Prepare the data to send in the POST request
    data = {
        'zip': zip_code
        # Include any other required form fields here if necessary
    }
    
    # Send a POST request with the zip code data
    response = session.post(url, data=data)
    response.raise_for_status()
    
    # Parse the resulting page
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # Extract latitude and longitude (you need to adjust these selectors based on the website's      structure)
    lat = soup.find('span', {'id': 'latitude'}).text.strip()
    lng = soup.find('span', {'id': 'longitude'}).text.strip()
    
    return lat, lng


# Example 
zip_code = ['97048','63640','63628']
latitude, longitude = get_lat_lng(zip_code)
print(f'Latitude: {latitude}, Longitude: {longitude}')
  1. запросите данные о широте и долготе из https://www.freemaptools.com/convert-us-zip-code-to-lat-lng.htm#google_vignette

  2. Запрос списка почтовых индексов, т.е. ['97048','63640','63628'] и получите широту и долготу для каждого почтового индекса.

  3. Это приводит к сообщению об ошибке.

Почему? Вы посмотрели, предоставляют ли они исходные данные или ссылаются на исходные данные? Постарайтесь не удалять данные, если вы можете получить данные (и, судя по названию веб-сайта, я предполагаю, что они просто объединяют данные, которые легко нашли в Интернете).

Giacomo Catenazzi 12.08.2024 13:43

Кажется, я не могу найти исходный источник данных.

Canberra 12.08.2024 13:46

Быстро погуглив, я нашел на нашем родственном сайте: gis.stackexchange.com/questions/5114/… , а также gist.github.com/erichurst/7882666 (который подсказывает, где найти источники) . В следующий раз постарайтесь тщательнее искать данные.

Giacomo Catenazzi 12.08.2024 13:56

Значения широты и долготы с предоставленного вами сайта в порядке, но их значения сильно отличаются от тех, которые я ищу. В любом случае, спасибо.

Canberra 12.08.2024 14:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пытаться:

import requests

api_url = (
    "https://api.promaptools.com/service/us/zip-lat-lng/get/?zip = {}&key=17o8dysaCDrgvlc"
)

zips = ["97048", "63640", "63628"]

headers = {
    "Origin": "https://www.freemaptools.com",
}

for z in zips:
    url = api_url.format(z)
    data = requests.get(url, headers=headers).json()
    print(z, data)

Распечатки:

97048 {'status': 1, 'output': [{'zip': '97048', 'latitude': '46.053228', 'longitude': '-122.971330'}]}
63640 {'status': 1, 'output': [{'zip': '63640', 'latitude': '37.747435', 'longitude': '-90.363484'}]}
63628 {'status': 1, 'output': [{'zip': '63628', 'latitude': '37.942778', 'longitude': '-90.484430'}]}

Ваш код работает для меня.

Canberra 12.08.2024 14:20

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