xpath - 如何在绝对 xpath 中捕获特定节点的索引号
问题描述
解释背景故事有点复杂 - 但有必要 - 所以需要一些耐心。
我正在尝试解析 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
在所有 Edgar URL 中无一例外地出现的单词。所以在下一阶段,我得到了他们每个人的 xpath:
if target is not None and 'Archives' in target:
print(tree.getpath(element))
到目前为止一切都很好,但这就是我卡住的地方:事实证明,由于某些非常奇怪的原因,每个相关的 URL 都不是出现在一个而是两个(在某些文档中 - 最多四个!)表中,并且这些不幸的是,表格不是文档中的第一个或最后一个表格,而是随机卡在中间的某个地方。因此,例如,Exhibit 10-5 的 xpath 是:
/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 的搜索?
解决方案
推荐阅读
- c# - 如何在 MVC 主控制器中将 http post 请求数据读取为 JSON?
- memcached - 是否可以选择使用 spring 缓存从缓存中执行 getBulk
- java - 即使关闭 InputStream 也无法删除文件
- python - Numpy比较两个3d数组并找到相同的数组
- java - 从异步方法中抛出异常是否合理?
- sql - 如何获取具有内容计数的行
- javascript - 在同一个列表上使用多个灯箱会导致问题
- azure-devops - 使用 Azure DevOps Services REST API 将超链接添加到描述
- r - 在 R-Markdown 中绘制两个词云时出错
- ios - react-native-image-picker - 重建后的持久存储