Извлечь номер из класса с помощью xpath - PullRequest
0 голосов
/ 26 февраля 2020

Я пытался извлечь несколько спален, ванных комнат и т. Д. c. из следующего класса, но каким-то образом я могу извлечь только первую часть списка (даже когда я проверяю, содержит ли оно слово):

Вот что у меня сейчас:

[69]: garages = response.xpath('//ul[@class="pro-list features"]/li[@class="features_item--numeric"][contains(., '" Garages"')]/span/text()').extract_first()

In [70]: garages
Out[70]: '1'

И в результате я как-то получаю только 1.

Вот как выглядит класс:

<ul class="pro-list features">
 <li class="features_item--numeric">
   <span>3</span>
   " Bedrooms"
 </li>
 <li class="features_item--numeric">
   <span>3</span>
   " Bathrooms"
 </li>
 <li class="features_item--numeric">
   <span>4</span>
   " Garages"
 </li>

Я не уверен, что делаю не так. Есть предложения?

Ответы [ 4 ]

1 голос
/ 26 февраля 2020

Попробуйте так:

response.css('li:contains(Garages) span::text').extract()[0]
0 голосов
/ 26 февраля 2020

С помощью этого селектора xpath вы можете легко получить то, что вам нужно, просто изменив текст соответствующим образом // li [normalize-space (text ()) = 'Гаражи'] / span / text ()

0 голосов
/ 26 февраля 2020

Этот XPath должен справиться (например, с «Гаражами») после того, как вы скачали и проанализировали html:

//li[substring-after(normalize-space(),' ')='Garages']/span/text()

Рабочий XPath для онлайн-страницы:

//li[normalize-space(text())='Garages']/span/text()

Рабочий XPath для XML, который вы разместили:

//li[contains(.,"Garages")]/span/text()

или

//li[substring-after(normalize-space(),'" ')='Garages"']/span/text()
0 голосов
/ 26 февраля 2020

Попробуйте использовать это выражение XPath-1.0:

//ul[@class="pro-list features"]/li[@class="features_item--numeric"][contains(., "Garages")]/following-sibling::span/text()

Соответствует тегу <span> после элемента <li>, который содержит текст Garages (а не " Garages", который равен не часть элемента <li> и требует совершенно другого подхода).

Или используйте <span> внутри элемента <li>:

//ul[@class="pro-list features"]/li[@class="features_item--numeric"][contains(., "Garages")]/span/text()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...