Scrapy - Как я могу обработать случайное количество элементов? - PullRequest
1 голос
/ 21 февраля 2020

У меня есть сканер Scrapy, с помощью которого я могу комфортно получить первый желаемый абзац, но иногда есть второй или третий абзац.

response.xpath(f"string(//h2[contains(text(), '{card}')]/following-sibling::p)").get() - это код xpath, который я использую для получения указанного абзаца.

response.xpath(f"string(//h2[contains(text(), '{card}')]/following-sibling::p[1])").get() получает тот же абзац, но иногда мне нужно response.xpath(f"string(//h2[contains(text(), '{card}')]/following-sibling::p[2])").get().

Как я могу go учесть это разное количество абзацев при соскобе?

1 Ответ

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

Вы можете попробовать использовать подстановочный знак *.

удалено

РЕДАКТИРОВАТЬ: С помощью функции string () вы получите только первый абзац.

Просто удалите string () из выражения XPath, чтобы получить все абзацы (при условии, что они находятся в одном узле) и сохраните результат в переменной.

//h2[contains(text(), '{card}')]/following-sibling::p/text()

Альтернатива: если вы знаете максимум Возможный номер абзаца можно использовать concat ().

concat(//h2[contains(text(), '{card}')]/following-sibling::p[1],'|',//h2[contains(text(), '{card}')]/following-sibling::p[2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...