xpath выбирает элементы и перебирает тег - PullRequest
0 голосов
/ 15 октября 2011

Считайте, что тег

в моем 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 и гиперссылки теряются.Я хочу извлечь данные

, а также текстовые данные (например, холст выше).Внутри элемента

может быть любое количество тегов.они могут присутствовать или не присутствовать в теге

.

Любая идея, как извлечь все данные.

Ответы [ 2 ]

0 голосов
/ 16 октября 2011

Когда вычисляется это выражение XPath :

string(.//*[contains(@class, "summary")]/p)

результатом является строка, представляющая собой конкатенацию (в порядке документа) всех потомков текстовых узлов p.

Полагаю, это то, что вы хотите.

0 голосов
/ 15 октября 2011

Я думаю, что две косые черты после p будут работать для вас.Одна косая черта / выбирает только дочерние элементы, две косые черты // будут включать более глубокие элементы.Поскольку текстовые узлы под a не являются прямыми потомками p, они не выделены.

site.select('.//*[contains(@class, "summary")]/p//text()').extract()

Обновление:

Отвечая на ваш комментарий: я могу думать только о таком пути:

for p in site.select('.//*[contains(@class, "summary")]/p'):
    p.select('//text()').extract()
...