Не можу отримати дані з HTML сторінки по xpath

Потрібно отримати дані з HTML сторінки по Xpath. На виході отримую пустий масив. Python 3.6.2.
По Xpath дані в браузері знаходяться.

import requests
from lxml import html

page = requests.get('http://www.ukrstat.gov.ua/operativ/operativ2010/ct/icv/icv_u/icv_m10.html')
tree = html.fromstring(page.content)
indexes = tree.xpath(".//*[@id='table3']/tbody/tr[2]//span/text()")

print(indexes)

Результат:

[]

Пробув отримати лише одне число - результат такий самий (це якщо є проблема з кодіровкою кирилиці).

Python:
element.text

Java
element.getText()

C#
element.Text

Ruby
element.text

Якщо ти про WebDriver - то мені такий варіант не підходить. Я роблю звичаний скріпт.

Якщо ти маєш на увазі tree = html.fromstring(page.text), вертає теж пустий список. Але в документації сказано що потрібно використовувати саме
метод content

(We need to use page.content rather than page.text because html.fromstring implicitly expects bytes as input.)

Нужно убрать с xpath атрибут “text()”

['\r\n\t\tПромислов\u0456сть', '101,9', '101,9', '103,0', '103,0', '104,4', '99,5', '99,8', '100,9', '100,1', '\r\n\t\t102,4', '99,7', '100,9']```
Там взагалі відсутній tbody, відповідно локатор просто невірний)
http://prntscr.com/h9fmkr
Якщо вже працюєте напряму з пейджсорсом - то локатори треба будувати на основі сорсу, а не того що "додумує від себе" ваш браузер)
1 лайк

Дякую за допомогу. Але все ж таки tbody там присутній і за допомогою firepath в firefox даний локатор знаходить мені потрібну інформацію.

То якщо мій солюшн вам допоміг - може все ж таки tbody там немає і браузер сам його додав для “стабілізації” сторінки?

$ curl -s http://www.ukrstat.gov.ua/operativ/operativ2010/ct/icv/icv_u/icv_m10.html | grep table3 -B 5 -A 5


<p class="MsoNormal" align="center" style="text-align: right; text-indent:0pt; margin-right:0pt; margin-top:0pt; margin-bottom:0pt">
<span lang="UK" style="font-size: 7.5pt; font-family: Verdana; layout-grid-mode: line">
(▒▒▒▒▒▒▒▒▒)</span></p>

</body>
<table class="MsoNormalTable" border="1" cellspacing="1" id="table3" width="100%">
        <tr>
                <td style="padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm" width="347">
                <p class="MsoNormal" style="text-indent: 0pt; margin: 0pt">
                <span lang="UK" style="font-size: 7.5pt; font-family: Verdana">&nbsp;</span></td>
                <td style="padding-left: 2.0pt; padding-right: 2.0pt; padding-top: 0cm; padding-bottom: 0cm" width="71">

Перевірити то досить легко, просто прибрати один слеш перед tr[2] :wink: