Я пытаюсь разобрать веб-страницу, содержащую это:Синтаксический XPath с питоном
<table style="width: 100%; border-top: 1px solid black; border-bottom: 1px solid black;">
<tr>
<td colspan="2"
style="border-top: 1px solid black; border-bottom: 1px solid black; background-color: #f0ffd3;">February 20, 2015</td>
</tr>
<tr>
<td style="border-top: 1px solid gray; font-weight: bold;">9:00 PM</td>
<td style="border-top: 1px solid gray; font-weight: bold">14°F</td>
</tr>
<tr>
<td style="border-bottom: 1px solid gray;">Clear<br />
Precip:
0 %<br />
Wind:
from the WSW at 6 mph
</td>
<td style="border-bottom: 1px solid gray;"><img class="wxicon" src="http://i.imwx.com/web/common/wxicons/31/31.gif"
style="border: 0px; padding: 0px 3px" /></td>
</tr>
<tr>
<td style="border-top: 1px solid gray; font-weight: bold;">10:00 PM</td>
<td style="border-top: 1px solid gray; font-weight: bold">13°F</td>
</tr>
<tr>
<td style="border-bottom: 1px solid gray;">Clear<br />
Precip:
0 %<br />
Wind:
from the WSW at 6 mph
</td>
<td style="border-bottom: 1px solid gray;"><img class="wxicon" src="http://i.imwx.com/web/common/wxicons/31/31.gif"
style="border: 0px; padding: 0px 3px" /></td>
</tr>
(он продолжает с большим количеством строк и заканчивается [/ таблица]
tree = html.fromstring(page)
table = tree.xpath('//table/tr')
for item in table:
for elem in item.xpath('*'):
if 'colspan' in html.tostring(elem):
print '*', elem.text
elif elem.text is not None:
print elem.text,
else:
print
несколько работает. Он не получает текст, следующий за [br /], и это далеко не изящно. Как получить недостающий текст? Кроме того, будут оценены любые предложения по улучшению кода.
Гораздо приятнее! Есть ли хороший способ определить, является ли строка линией даты, временной линией или другой строкой (с использованием xpath, а не для разбора содержимого)? Если ничего другого, я бы хотел объединить каждую линию времени с ее чистой линией прохода. – foosion
@foOSion для строки даты - я бы выполнил принцип EAFP и попытался загрузить содержимое с помощью 'datetime.strptime()' и обработать 'ValueError' - если нет ошибки - это строка даты. На временной линии я думаю, что вы можете просто искать слово «PM» или «AM» внутри содержимого. Похоже, что другие линии начинаются с «Clear Precip». – alecxe
@foosion позвольте мне предоставить вам образец, дайте мне минуту. – alecxe