Я новичок в RegEx (и Python) в целом и пытаюсь использовать его для чтения температуры и описания погоды через HTML-теги веб-сайта.
Для этого я попытался переработать примеры того, что мне показывали в классе и читал в Интернете.
url = 'https://weather.com/en-AU/weather/today/l/-27.47,153.02'
contents = urllib.request.urlopen(url).read().decode("utf-8")
start_of_div = contents.find('<div class="today_nowcard-phrase">') # start of phrase line
end_of_div = start_of_div + contents[start_of_div:].find("</div>") + 6 # close of phrase line
phrase_area = contents[start_of_div:end_of_div]
print(phrase_area)
phrase = phrase_area.rfind(r'>(.*)<') # regex tester says this works
print(phrase)
Затем есть еще один раздел, который получает степени и использует такой же макет. Он должен печатать фразу типа «Солнечно» или «Слабый дождь» или любую другую погоду, а также текущие градусы (по Цельсию). Вместо этого он распечатывает:
<div class="today_nowcard-phrase">Sunny</div>
- 1
<div class="today_nowcard-temp"><span class="">21<sup>
- 1
Вместо -1 должно быть «Солнечно» и «21» (на тот момент). RegEx работает, когда я размещаю его на тестовых сайтах RegEx, но не в моей реальной программе (вероятно, из-за какой-то очевидной ошибки, которую я не вижу). Любая помощь будет оценена по достоинству.
str.find
не реализует регулярное выражение, он просто ищет литеральную строку. Взгляните на модульre
из стандартной библиотеки для Perl-подобной реализации регулярного выражения. - person isaactfa   schedule 05.05.2019rfind()
не использует регулярные выражения. Ваш код ищет буквальную строку>(.*)<
, которой, конечно же, нет. - person John Gordon   schedule 05.05.2019