Это немного сложно - но необходимо - объяснить предысторию, поэтому требуется некоторое терпение.
Я пытаюсь проанализировать регистрацию в 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?