Получение таблицы значений из запроса Weatherbug - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь исследовать то, что мне нужно узнать через этот существующий пост SO о чтении через pandas (или лучший метод?) Значений для почасового запроса погоды из ошибки погоды. Через веб-сайт о погодных ошибках, если я введу почтовый индекс или город, я смогу получить 12 часов будущих часовых данных о погоде.

Как бы я поместил только данные о температуре в pandas данных? (1 столбец с 12 строками, представляющими час с 1 по 12)?

Спасибо за любые советы, извините, здесь не так много мудрости ..

import requests

url = 'https://www.weatherbug.com/weather-forecast/hourly/san-francisco-ca-94103'

header = {
  "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
  "X-Requested-With": "XMLHttpRequest"
}

r = requests.get(url, headers=header)

dfs = pd.read_html(r.text)

Если я запусту это, я получу ошибка

ValueError: Таблицы не найдены

1 Ответ

0 голосов
/ 16 марта 2020

Ну read_html может читать таблицы в html документе. И текст ошибки правильный: документ не содержит таблицы, но отформатирован с использованием набора div элементов.

Это означает, что pandas не может обработать его напрямую. Вместо этого вы должны использовать BeautifulSoup для анализа html и извлечения соответствующей информации в списки и словари, а затем создать кадр данных из этих python контейнеров.


Правило состоит в том, что это зависит от стр. Обычный способ - использовать инструменты разработчика в вашем браузере, чтобы увидеть, как устроена страница, и определить соответствующие элементы. Затем вы управляете источником отображения , чтобы элементы передавались с HTML, а не через javascript. Здесь вам повезло, потому что данные находятся прямо внутри HTML части.

Так что вам следует:

  • использовать запросы или urllib.request для загрузки страницы
  • используйте BeautifulSoup для извлечения элементов, идентифицированных в инструменте разработчика браузера *
  • объединить все
...