2016-01-09 2 views
2

Я пытаюсь скрести некоторые данные из веб-страницы ... мне удалось извлечь имя и цены, но у меня есть проблема здесь ... Фото: http://i.imgur.com/N8p9Fj2.jpgHTML соскабливания XPath

Я хочу напечатать все <li></li> раздел, но числа, покрытые <bold></bold>, не отображаются, почему это? Я уверен, что есть способ напечатать все это.

Я делал это: Оригинальный XPath является

//*[@id="ad-54132"]/div[2]/ul/li 

Что я укоротить (так, чтобы он не печатает все объявления независимо от того, какой номер они вместо того, чтобы просто напечатав «54132» объявление) в :

squarefeet = tree.xpath('//*/div[2]/ul/li/text()') 

И, как я уже сказал в начале, он просто печатает текст, а не на <bold></bold>

ответ

1

с помощью li/text() вы получите только текстовые узлы й at is прямой ребенокli.

Чтобы получить все текстовые узлы в пределах li, независимо от того, какой прямой ребенок или вложенный, вы можете использовать li//text(). Но это приведет к появлению нескольких текстовых узлов для каждого li, которого вы, возможно, не захотите.

Если вы хотите, чтобы получить все текстовые узлы объединяются в единый текст для каждого li, вы можете вызвать XPath string() или normalize-space() функцию для каждого li элемента следующим образом:

squarefeet = [li.xpath('normalize-space(.)') for li in tree.xpath('//*/div[2]/ul/li')] 

normalize-space() ведет себя так же, как string() в этом случае , плюс он удаляет ведущие и конечные пробелы, если они есть, и также заменяет последовательности пробелов одним пробелом.

0

Следующая XPath будет работать:

//*[@id="ad-54132"]/div[2]/ul/li/* 

Символ * в конце выбирает все дочерние узлы тега «литий»

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