Как получить неэлементный текст рядом с тегом с помощью Scrapy? - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь удалить страницу с помощью Scrapy Framework.

<div class="info"><span class="label">Establishment year</span> 2014</div>

Тег, с которым я хочу иметь дело, выглядит так, как указано выше. Я хочу получить значение 2014. Я не могу использовать класс информации или метки, поскольку они являются общими для всей страницы.

Итак, я попробовал указать ниже xpath, но получаю null:

response.xpath("//span[contains(text(),'Establishment year')]/following-sibling").get()

response.xpath("//span[contains(text(),'Establishment year')]/following-sibling::text()").get()

Есть подсказки, в чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Извлечь дочерние элементы прямого текста (/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'
0 голосов
/ 05 мая 2020

Поскольку вы пытаетесь извлечь его между тегами, вы должны использовать тег в конце. Я не знаю, какой веб-сайт вы пытаетесь очистить, но вот пример того, как я соскребал между тегом '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()
...