Как получить неэлементный текст рядом с тегом с помощью Scrapy?
Я пытаюсь удалить страницу с помощью Scrapy Framework.
<div class="info"><span class="label">Establishment year</span> 2014</div>
Тег, с которым я хочу иметь дело, выглядит так, как показано выше. Я хочу получить значение 2014. Я не могу использовать класс информации или метки, поскольку они являются общими для всей страницы.
Итак, я пробовал ниже xpath, но получаю ноль:
response.xpath("//span[contains(text(),'Establishment year')]/following-sibling").get()
response.xpath("//span[contains(text(),'Establishment year')]/following-sibling::text()").get()
Любая подсказка, в чем может быть проблема?
2 ответа
Извлечь дочерние элементы прямого текста (/text()
) из родительского элемента:
>>> from parsel import Selector
>>> selector = Selector(text='<div class="info"><span class="label">Establishment year</span> 2014</div>')
>>> selector.xpath('//*[@class="info"]/text()').get()
' 2014'
Поскольку вы пытаетесь извлечь его между тегами, вы должны использовать тег в конце. Я не знаю, какой веб-сайт вы пытаетесь очистить, но вот пример того, как я соскребал между тегом 'a' на этом веб-сайте http://books.toscrape.com/ Вот код, который я использовал для этого
response.xpath("(//h3)[1]/a/text()").extract_first()
Во второй строке кода вы не использовали функцию извлечения текста правильно. Тот, который вы используете, предназначен для селектора CSS. Для Xpath if будет /text(), а не::text(). Для вашего кода, я думаю, вам следует попробовать один из этих вариантов. Сообщите мне, если это поможет.
response.xpath("//span[contains(text(),'Establishment year')]/div/text()").get()
или
response.xpath("//span[contains(text(),'Establishment year')]/span/text()").get()