Я пытаюсь очистить данные о погоде с веб-сайта, используя скрипт Python и lxml. Данные о скорости ветра будут извлечены и добавлены в список для последующей обработки. Я могу получить информацию, которая мне нужна, просто отлично, если она отформатирована следующим образом:
<div class = "day-fcst">
<div class = "wind">
<div class = "gust">
"Gusts to 20-30mph"
</div>
</div>
</div>
Однако, когда присутствуют слабые ветра, веб-сайты добавляют дочерний класс span под div "gust" следующим образом:
<div class = "gust">
<span class = "nowind">
"Gusts less than 20mph"
</span
</div>
Мой мыслительный процесс состоял в том, чтобы проверить, существует ли span, если true, тогда выполнить выражение XPath, чтобы вытянуть текст под span, в противном случае выполнить выражение XPath, просто чтобы вытянуть текст под div "gust". Я пытался найти примеры использования булевых функций XPath, но не смог заставить что-либо работать (ни в веб-инспекторе Safari, ни в моем скрипте).
Мой текущий код использует Python для проверки, эквивалентен ли класс span классу nowind, а затем выполняет операторы if и else, но выполняется только оператор else. Мой текущий код выглядит так:
from lxml import html
import requests
wind = []
source=requests.get('website')
tree = html.fromstring(source.content)
if tree.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]/span/@class') == 'nowind':
wind.append(tree.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]/span/text()'))
else:
wind.append(tree.xpath('//div[@class = "day-fcst"]/div[@class = "wind"]/div[@class = "gust"]/text()'))
print wind
Я бы хотел решить эту проблему с помощью выражения XPath, которое приводит к логическому значению, а не к моему текущему решению. Любая помощь будет оценена. Я все еще новичок в использовании XPath, поэтому я не знаком с использованием каких-либо его функций.