Как захватить номер индекса определенного узла в абсолютном xpath - PullRequest
0 голосов
/ 11 апреля 2019

Это немного сложно - но необходимо - объяснить предысторию, поэтому требуется некоторое терпение.

Я пытаюсь проанализировать регистрацию в SEC Edgar (эта форма 10-K, как случайный пример) , не для ее финансовых данных, а для списка экспонатов, содержащегося встол к концу документа.Каждый документ содержит в таблице 3 атрибута, которые меня интересуют (номер экспоната, заголовок и URL), но для этого примера я сосредоточусь только на URL.

Начать поиск всех URL-адресов в документе достаточно просто:

from lxml import etree
import lxml.html

for element in tree.iter('a'):
   target = element.values()[0]

Но поскольку документ может содержать сотни URL-адресов, большинство из которых не имеют значения, я должен отфильтроватьрезультаты для присутствия слова Archives, которое появляется без исключения во всех URL-адресах Эдгара.Итак, на следующем этапе я получаю xpath каждого из них:

if target is not None and 'Archives' in target:      
               print(tree.getpath(element))

Пока все хорошо, но вот где я застреваю: получается, что по какой-то очень странной причине каждый изсоответствующие URL-адреса появляются не в одной, а в двух (а в некоторых документах - до четырех!) таблиц, и что эти таблицы, к сожалению, не являются первой или последней таблицами в документе, а случайным образом застряли где-то посередине.Так, например, xpaths в Приложении 10-5:

/html/body/document/type/sequence/filename/text/div[2]/table[9]/tr[17]/td[3]/p/a

/html/body/document/type/sequence/filename/text/div[2]/table[12]/tr[17]/td[3]/p/a

Таким образом, URL отображается точно в одном месте и в таблице 9, и в таблице 12. Очевидно, я не хочу, чтобы этот URL появлялся дваждыэто мой окончательный список URL, поэтому в моем последнем поиске я хотел бы запустить

for i in tree.xpath('//table[XXX]//*/a'):
     print(i.values()[0])

, где XXX в данном примере 9 или 12.

ТакВернемся к названию вопроса - как извлечь индексный номер таблицы, чтобы я мог выбрать более высокий (или более низкий) индекс для моего выражения tree.xpath()?Альтернативно, есть ли способ остановить поиск getpath в таблице 9?

...