2015-08-02 4 views
0

Я хочу разобрать этот запрос Xpath с помощью lxml в python.Parsing html-страница с lxml в python

.//*[@id='content_top']/article/div/table/tbody/tr[5]/td/p/text() 

Я проверил запрос XPATH в Firepath (расширение Firebug для XPath), и она работает, но мой питон код не показывают мне ничего. Вот источник.

from lxml import html 
import requests 

page = requests.get("http://www.scienzeetecnologie.uniparthenope.it/avvisi.html") 
tree = html.fromstring(page.text) 
avvisi = tree.xpath(".//*[@id='content_top']/article/div/table/tbody/tr[5]/td/p/text()") 
print(avvisi) 

Выходной сигнал "[]".

ответ

1

В исходном html нет элемента <tbody>, его просто элемент в DOM, добавленный парсером HTML.

Firebug фактически отображает DOM (и я предполагаю, что firepath, который является расширением firebug, работает на этом DOM (а не на исходном html)).

Для более детального объяснения <tbody> и почему поджигатель отображает его, проверить ответы на вопрос SO - Why does firebug add <tbody> to <table>? или этот вопрос - Why do browsers insert tbody element into table elements?


В вашем случае, удаление <tbody> из XPath, бы заставьте его работать, пример -

avvisi = tree.xpath(".//*[@id='content_top']/article/div/table/tr[5]/td/p/text()") 
+0

СПАСИБО МУЖЧИНЫ ВЫ СДЕЛАЛИ МОЙ ДЕНЬ! :) Но почему в списке выход? У меня эти странные символы? например \ xa0 или подобное? Есть ли способ избежать их печати? – Coogle

+0

Распечатайте каждый элемент в списке отдельно, когда вы печатаете список как таковой, вы получаете вывод 'repr()' строк. –

+0

Что-то вроде - 'for i in avvisi: print (i)' –

Смежные вопросы