Пустое пространство и селекторы - PullRequest
2 голосов
/ 16 мая 2019

Попробуйте использовать селектор на Scrapy Shell для извлечения информации с веб-страницы и не работает должным образом. Я считаю, что это произошло, потому что существуют пробелы в имя класса. Есть идеи, что не так?

Я пробовал разные синтаксисы, такие как:

response.xpath('//p[@class="text-nnowrap hidden-xs"]').getall()

response.xpath('//p[@class="text-nnowrap hidden-xs"]/text()').get()

# what I type into my scrapy shell
response.css('div.offer-item-details').xpath('//p[@class="text-nowrap hidden-xs"]/text()').get()

# html code that I need to extract:
<p class="text-nowrap hidden-xs">Apartamento para arrendar: Olivais, Lisboa</p>

ожидаемый результат: Apartamento para arrendar: Olivais, Lisboa

фактический результат: []

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Пробел в разделе классов означает, что есть несколько классов, класс "text-nnowrap" и класс "hidden-xs". Чтобы выбрать по xpath для нескольких классов, вы можете использовать следующий формат:

"//element[contains(@class, 'class1') and contains(@class, 'class2')]"

(взял это из Как получить HTML-элементы с несколькими классами CSS )

Так что в вашем примере я считаю, что это сработает.

response.xpath("//p[contains(@class, 'text-nnowrap') and contains(@class, 'hidden-xs')]").getall()
1 голос
/ 17 мая 2019

В этом случае я предпочитаю использовать селекторы css из-за его минималистического синтаксиса:
response.css("p.text-nowrap.hidden-xs::text")

Также инструменты разработчика Google Chrome отображают селекторы CSS при просмотре HTML-кода
Это значительно упрощает разработку скребка google developer tools

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...