выбор нескольких тегов узла knime xpath - PullRequest
0 голосов
/ 22 декабря 2019

Я пытаюсь извлечь XML-коды из 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>

На самом деле мне нужно родительское дочернее отношение, поэтому мне нужно сначала извлечь ячейку узла с узлом xpath. Но я не смог добиться диапазона XML-кода от "h5" до "/ ul". Так что мне нужны теги 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]

Любая идея, спасибо.

1 Ответ

0 голосов
/ 23 декабря 2019

Если вы используете 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 []
...