Webscraping USGS HTML-данных с использованием регулярных выражений - PullRequest
0 голосов
/ 11 декабря 2019

Я очищаю HTML, используя красивый суп и используя регулярное выражение для извлечения данных из двух рек с использованием сайта USGS. Я собираю речную высоту, дату и время. Код работает для первого, но не для второго.

from urllib.request import urlopen as uReq
import re
import os
from bs4 import BeautifulSoup as soup

wilson_url = 'https://waterdata.usgs.gov/or/nwis/uv?site_no=14301500'
wilson_client = uReq(wilson_url)
wilson_html = wilson_client.read()
wilson_client.close()

wilson_soup = soup(wilson_html, "html.parser")
wilson = wilson_soup.findAll("div",{"class":"stationContainer"})

wilson_lvl_text = wilson[2].text

gauge_compile = re.compile('Most recent instantaneous value:\s+(\d+\\.\d+\d)+\s+(\d+\d+\\-\d+\d+\\-\d+\d+\d+\d)+\s+\s+\s+(\d+\d+\\:\d+\d+\s+\w+\w+\w)')
gauge_search = gauge_compile.search(wilson_lvl_text)

wilson = float(gauge_search.group(1))
wil_day = gauge_search.group(2)
wil_time = gauge_search.group(3)
print('As of', wil_day, ', at', wil_time, '...')
print()
print('The Wilson River level is', wilson, 'feet.')
nehalem_url = 'https://waterdata.usgs.gov/nwis/uv?site_no=14301000'
nehalem_client = uReq(nehalem_url)
nehalem_html = nehalem_client.read()
nehalem_client.close()

nehalem_soup = soup(nehalem_html, "html.parser")
nehalem = nehalem_soup.findAll("div",{"class":"stationContainer"})

nehalem_lvl_text = nehalem[2].text

gauge_compile = re.compile('Most recent inehantaneous value:\s+(\d+\\.\d+\d)+\s+(\d+\d+\\-\d+\d+\\-\d+\d+\d+\d)+\s+\s+\s+(\d+\d+\\:\d+\d+\s+\w+\w+\w)')
gauge_search = gauge_compile.search(nehalem_lvl_text)

nehalem = float(gauge_search.group(1))
neh_day = gauge_search.group(2)
neh_time = gauge_search.group(3)
print('As of', neh_day, ', at', neh_time, '...')
print()
print('The Nehalem River level is', nehalem, 'feet.')

При запуске модуля выводятся правильные показания для реки Уилсон, но при попытке выполнения регулярного выражения при поиске показаний датчика Nehalem River:

As of 12-10-2019 , at 22:30 PST ...

The Wilson River level is 4.2 feet.
Traceback (most recent call last):
  File "C:\Python\Scripts\streams.py", line 41, in <module>
    nehalem = float(gauge_search.group(1))
AttributeError: 'NoneType' object has no attribute 'group'

1 Ответ

1 голос
/ 11 декабря 2019

Человек, здесь нет "Самая недавняя нештатная величина", это "Самая последняя мгновенная величина:".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...