Ваше выражение XPath не соответствует ни одному, потому что HTML-страница, которую вы пытаетесь очистить, серьезно нарушена. FF (или любой другой веб-браузер) фиксирует страницу в пути, прежде чем отображать ее. Это приводит к добавлению тегов HTML, которых нет в исходном документе.
Следующий код содержит выражение XPath, которое, скорее всего, укажет вам в правильном направлении.
import requests
from lxml import html, etree
sample_page = requests.get("https://www.racenet.com.au/horse-racing-results/happy-valley/2016-11-16")
tree = html.fromstring(sample_page.content)
nodes = tree.xpath("//*[@id='resultsListContainer']/div/table[@class='tblLatestHorseResults']/tr[@class='raceDetails']/td/span[1]")
for node in nodes:
print etree.tostring(node)
При выполнении этого печатает следующее:
$ python test.py
<span class="bold">Class 5</span> Track:
<span class="bold">Class 4</span> Track:
<span class="bold">Class 4</span> Track:
<span class="bold">Class 4</span> Track:
<span class="bold">Class 4</span> Track:
<span class="bold">Class 3</span> Track:
<span class="bold">Class 2</span> Track:
<span class="bold">Class 3</span> Track:
Подсказка: всякий раз, когда вы пытаетесь, чтобы очистить веб-страницы, и вещи просто не работают, как и ожидалось, загрузить и сохранить HTML в файл. В этом случае, например:
f = open("test.xml", 'w')
f.write(sample_page.content)
Затем просмотрите сохраненный HTML. Это дает вам представление о том, как будет выглядеть DOM.
// * [@ id = "resultsListContainer"]/div [3]/table // tr [1]/td/span [1]/text() – spinkus
все еще ничего не получает – McLeodx
Проверка с использованием Firebug доказывает, что нет ничего неправильно с вашим выражением XPath, должно быть что-то еще. – Bouke