#python #xpath #hyperlink #extract
#python #xpath #гиперссылка #извлечь
Вопрос:
Рассмотрим
тег в моем html выглядит так
<div class ="summary">
<p>Best <a class="abch" href="/canvas">canvas</a> abcdefgh <a class="zph" href="/canvas">canvas</a>, I cycle them to garden</p>
</div>
Когда я делаю
site.select('.//*[contains(@class, "summary")]/p/text()').extract()
Я получаю только текст p, а гиперссылки теряются.
Я хочу извлечь данные из
а также текстовые данные (например, canvas выше). Внутри может быть любое количество тегов
элемент. они могут присутствовать, а могут и не присутствовать в
тег.
Есть идеи, как извлечь все данные.
Ответ №1:
Я думаю, что две косые черты после p
будут работать для вас. Одна косая черта /
выбирает только дочерние элементы, две косые черты //
будут включать более глубокие элементы. Поскольку текстовые узлы под a
не являются прямыми дочерними элементами p
, они не выбираются.
site.select('.//*[contains(@class, "summary")]/p//text()').extract()
Обновить:
Отвечая на ваш комментарий: Я могу только думать о таком способе:
for p in site.select('.//*[contains(@class, "summary")]/p'):
p.select('//text()').extract()
Комментарии:
1. Ну, внутри html-документа есть много тегов summary. Итак, если я добавлю p //, это вернет текст всех этих сводных тегов. В то время как я хочу, чтобы описание извлекалось для одного тега за раз.
Ответ №2:
Когда вычисляется это выражение XPath:
string(.//*[contains(@class, "summary")]/p)
результатом является строка, которая является конкатенацией (в порядке документа) всех текстовых узлов -потомков p
.
Я предполагаю, что это то, что вы хотите.
Комментарии:
1. это вернет весь текст с тегами!
2. @Gaurav: Утверждение в вашем комментарии совершенно неверно — просто попробуйте посмотреть, каков результат! И читайте и учитесь! Никогда не делайте абсолютных заявлений о том, чего вы не знаете.