【问题标题】:knime xpath node multiple tag selectionknime xpath 节点多标签选择
【发布时间】:2023-03-28 11:38:01
【问题描述】:

我正在尝试从 html 源代码中提取 xml 代码。源码是这样的;

.
.
.
<h5>
 <u>A</u>
</h5>
<ul class="listss">
<li>
<d>
<a href="link">
 linktext
</a>
</d>
</li>
<li>
<d>
<a href="link2">
 linktext2
</a>
</d>
</li>
</ul>
<h5>
 <u>B</u>
</h5>
<ul class="listss">
 .\
 .(SAME TAGS AS ABOVE)
 ./
</ul>
<h5>
 <u>C</u>
</h5>
<ul class="listss">
 .\
 .(SAME TAGS AS ABOVE)
 ./
</ul>
<h5>
 <u>D</u>
</h5>
<ul class="listss">
 .\
 .(SAME TAGS AS ABOVE)
 ./
</ul>

实际上我需要父子关系,所以我需要先用 xpath 节点提取节点单元格。但我无法获得从“h5”到“/ul”的 xml 代码范围。所以我需要一起使用“h5”和“ul”标签。输出一定是这样的;

<h5>
    <u>A</u>
</h5>
<ul class="listss">
 <li>
  <d>
   <a href="link">
    linktext
   </a>
  </d>
 </li>
 <li>
  <d>
   <a href="link2">
    linktext2
   </a>
  </d>
 </li>
</ul>

我搜索了大量链接并尝试了所有方法,但这些 xpath 代码均无效;

/.../*[self::dns:h5 or self::dns:ul]
/.../*[self::dns:h5|self::dns:ul]
/.../*[self::h5 or self::ul]

任何想法,谢谢。

【问题讨论】:

  • 请使用edit将所需的输出添加到您的问题中。
  • 你的html有两个h5/ul对;第一个和第二个有什么区别(对你来说)?
  • 第一个 h5 标签有年份(在本例中为 A、B、C、D),在年份下有链接列表。我只是想对年份进行分组和提取,并将其链接在一起。像 A 和它的链接,B 和它的链接等。如果它令人困惑,我可以更改 ul 标签下的第二个 h5 标签。

标签: xpath knime


【解决方案1】:

如果你使用 Python,你可以这样做

from simplified_scrapy.simplified_doc import SimplifiedDoc 
html = '''<h5>
  <u>A</u>
</h5>
<ul class="listss">
  <li>
    <d>
      <a href="link">
        linktext
      </a>
    </d>
  </li>
  <li>
    <d>
      <a href="link2">
        linktext2
      </a>
    </d>
  </li>
</ul>
<h5>
  <u>B</u>
</h5>
<ul class="listss">
  .\
  .(SAME TAGS AS ABOVE)
  ./
</ul>
<h5>
  <u>C</u>
</h5>
<ul class="listss">
  .\
  .(SAME TAGS AS ABOVE)
  ./
</ul>
<h5>
  <u>D</u>
</h5>
<ul class="listss">
  .\
  .(SAME TAGS AS ABOVE)
  ./
</ul>'''
doc = SimplifiedDoc(html)
items = doc.children
lastName = None
for item in items:
  if item.tag == 'h5':
    lastName = item.text
  else:
    links = item.getElementsByTag('a')
    print (lastName,links)

结果:

A [{'href': 'link', 'tag': 'a', 'html': 'linktext\n      '}, {'href': 'link2', 'tag': 'a', 'html': 'linktext2\n      '}]
B []
C []
D []

【讨论】:

    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多