簡體   English   中英

在lxml / Python中獲取所選元素旁邊的文本

[英]Get text next to selected element in lxml / Python

我有以下HTML標記,我想從這個片段中得到英文描述為純文本 - 沒有“英文,沒有任何標記”:

from lxml import etree


html = '''
    <td class="description">
    <p><b>English:</b> Ulm, Germany, old town with Münster, city wall and Metzgerturm, as seen from the south bank of the river Danube.</p>
    <p><b>Deutsch:</b> Ulm, Ansicht der Altstadt vom rechten Donauufer aus. Abgebildet ist das Donauschwabenufer, von der Altstadt sind erkennbar: Das dominante Münster mit Hauptturm, Schiff und zwei Chortürmen; unterhalb des Hauptturms des Münsters zwei Giebel, die zur historischen Krone gehören (linker Giebel größtenteils von Bäumen verdeckt); die Spitze der neuen, gläsernen Stadtbibliothek von Gottfried Böhm; weiter rechts zwei Giebel des Rathauses (gelb-braun); am rechten Rand der Metzgerturm als Teil der Stadtbefestigung.</p>
    </td>
'''

tree = etree.fromstring(html)
for el in tree.xpath('//td[contains(concat(" ", normalize-space(@class), " "), " description ")]/div|p'):
    print etree.tostring(el)

使用這個腳本,我得到包括所有標簽的單個段落,但我被卡在那里......這些段落也可能是DIV; 因此我在xpath中使用了div | p。

lxml解決方案也應該與DIV容器一起使用,如下所示:

<td class="description">
    <div class="description mw-content-ltr et" dir="ltr" lang="et" style=""><span class="language et" title=""><b>Eesti:</b></span> Olen loonud selle pildi, kui ma nägin arutelu uue Wiki logo.</div>
    <div class="description mw-content-ltr en" dir="ltr" lang="en" style=""><span class="language en" title=""><b>English:</b></span> "Prototype" for new Wiktionary Logo</div>
</td>

您想要獲得的文本是b標簽的尾部:

import lxml.html

html = u'''
    <td class="description">
    <p><b>English:</b> Ulm, Germany, old town with Münster, city wall and Metzgerturm, as seen from the south bank of the river Danube.</p>
    <p><b>Deutsch:</b> Ulm, Ansicht der Altstadt vom rechten Donauufer aus. Abgebildet ist das Donauschwabenufer, von der Altstadt sind erkennbar: Das dominante Münster mit Hauptturm, Schiff und zwei Chortürmen; unterhalb des Hauptturms des Münsters zwei Giebel, die zur historischen Krone gehören (linker Giebel größtenteils von Bäumen verdeckt); die Spitze der neuen, gläsernen Stadtbibliothek von Gottfried Böhm; weiter rechts zwei Giebel des Rathauses (gelb-braun); am rechten Rand der Metzgerturm als Teil der Stadtbefestigung.</p>
    </td>
    <td class="description">
        <div class="description mw-content-ltr et" dir="ltr" lang="et" style=""><span class="language et" title=""><b>Eesti:</b></span> Olen loonud selle pildi, kui ma nägin arutelu uue Wiki logo.</div>
        <div class="description mw-content-ltr en" dir="ltr" lang="en" style=""><span class="language en" title=""><b>English:</b></span> "Prototype" for new Wiktionary Logo</div>
    </td>
'''

tree = lxml.html.fromstring(html)
for el in tree.cssselect('td.description p b, td.description span'):
    if el.text_content().startswith('English'):
        print(el.tail.strip())

輸出:

Ulm, Germany, old town with Münster, city wall and Metzgerturm, as seen from the south bank of the river Danube.
"Prototype" for new Wiktionary Logo

注意您需要使用lxml.html 否則,您無法使用text_cotnent()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM