簡體   English   中英

如何使用 xpath 和 python 在包含不需要的 BR 標簽的標簽之間提取文本?

[英]How to extract text between tags containing unwanted BR tags with xpath and python?

在 div 標簽中有我想提取的文本,但在前導介紹和頁腳中,不幸的是在 div 中。

文本的開頭總是有 3 個 BR 標簽,文本的結尾有 2 個 BR 標簽,中間的文本也可能由 BR 標簽本身來划分。

簡單示例如下所示:

   <div class="text" itemprop="description">
            bla
        <br>
            bla
        <br>
        <br>
            text
        <br>
            text
        <br>
            text
        <br>
        <br>
            bla
    </div>

完整示例:

response.xpath('//div[@itemprop="description"]').extract_first()

'<div class="text" itemprop="description">jung<br><br>Wunderschöner, sanfter Pyrenäenberghund Rüde schweren Herzens abzugeben. Rudi ist Anfang Juli letzten Jahres bei uns geboren und hat sich mittlerweile zu einem stattlichen jungen Mann entwickelt. Er ist ein total freundliches Kerlchen im Umgang mit seinen Mitmenschen, egal ob groß oder klein, und versteht sich auch mit Katzen und anderen Tieren wie auch z.B. Ziegen. Es kristallisierte sich auch schnell heraus, dass er der intelligenteste unserer 11 Welpen war. Sitz und Platz klappte innerhalb kürzester Zeit, da er sehr lernwillig ist. Er hat bis März bei uns gelebt und war dann für 1,5 Monate in einer anderen Familie, wo es aber leider Probleme innerhalb des Rudels gab und die neuen Besitzer ihn daher wieder zu uns gegeben haben. Es war aber nicht seine Schuld, dass es nicht funktioniert hat, er hat sich nicht falsch verhalten. Wir wünschen uns für ihn, dass er einen Platz findet, wo man die Eigenschaften eines Herdenschutzhundes zu schätzen und lieben weiß. Deshalb ist es uns sehr wichtig, dass die neuen Besitzer bereits Erfahrung mit Herdenschutzhunden haben. Außerdem wäre es schön, wenn er einen Partner zum Spielen hätte, da er es als Einzelhund nicht kennt. Rudi ist selbstverständlich gechippt, geimpft und entwurmt.<br><br>Weitere Angaben: Rüde, EU-Heimtierausweis, entwurmt, gechipt, geimpft, nur für Hundeerfahrene, verträglich mit Katzen, Familienhund, kinderfreundlich.</div>'

嘗試通過執行字符串方法刪除標簽並沒有解決問題,因為我還將刪除中間的 BR,而且我還想刪除不需要的頁眉/頁腳。

response.xpath('string(//div[@itemprop="description"])').extract_first()

預計 output:

Wunderschöner, sanfter Pyrenäenberghund Rüde schweren Herzens abzugeben。 Rudi ist Anfang Juli letzten bei uns geboren und hat sich mittlerweile zu einem stattlichen jungen Mann entwickelt。 Er ist ein total freundliches Kerlchen im Umgang mit seinen Mitmenschen, egal ob groß oder klein, und versteht sich auch auch mit Katzen und anderen Tieren wie auch zB Ziegen。 Es kristallisierte sich auch schnell heraus, dass er der intellenteste unserer 11 Welpen 戰爭。 Sitz und Platz klappte innerhalb kürzester Zeit,da er sehr lernwillig ist。 Er hat bis März bei uns gelebt und war dann für 1,5 Monate in einer anderen Familie, wo es aber leider Probleme innerhalb des Rudels gab und die neuen Besitzer ihn daher wieder zu uns gegeben haben。 Es war aber nicht seine Schuld, dass es nicht funktioniert hat, er hat sich nicht falsch verhalten. Wir wünschen uns für ihn, dass er einen Platz findet, wo man die Eigenschaften eines Herdenschutzhundes zu schätzen und lieben weiß。 Deshalb ist es uns sehr wichtig, dass die neuen Besitzer bereits Erfahrung mit Herdenschutzhunden haben。 Außerdem wäre es schön, wenn er einen Partner zum Spielen hätte, da er es als Einzelhund nicht kennt。 Rudi ist selbstverständlich gechippt, geimpft und entwurmt.

預計刪除:

榮格



Weitere Angaben: Rüde, EU-Heimtierausweis, entwurmt, gechipt, geimpft, nur für Hundeerfahrene, verträglich mit Katzen, Familienhund, kinderfreundlich。

如何刪除前導文本和頁腳文本並提取 rest?

您可以使用以下 XPath:

//div[@itemprop="description"]/text()[not(position()=last())][preceding-sibling::*[2][self::br]][normalize-space()]

代碼:

data = """HTML
<div class="text" itemprop="description">jung<br><br>Wunderschöner, sanfter Pyrenäenberghund Rüde schweren Herzens abzugeben. Rudi ist Anfang Juli letzten Jahres bei uns geboren und hat sich mittlerweile zu einem stattlichen jungen Mann entwickelt. Er ist ein total freundliches Kerlchen im Umgang mit seinen Mitmenschen, egal ob groß oder klein, und versteht sich auch mit Katzen und anderen Tieren wie auch z.B. Ziegen. Es kristallisierte sich auch schnell heraus, dass er der intelligenteste unserer 11 Welpen war. Sitz und Platz klappte innerhalb kürzester Zeit, da er sehr lernwillig ist. Er hat bis März bei uns gelebt und war dann für 1,5 Monate in einer anderen Familie, wo es aber leider Probleme innerhalb des Rudels gab und die neuen Besitzer ihn daher wieder zu uns gegeben haben. Es war aber nicht seine Schuld, dass es nicht funktioniert hat, er hat sich nicht falsch verhalten. Wir wünschen uns für ihn, dass er einen Platz findet, wo man die Eigenschaften eines Herdenschutzhundes zu schätzen und lieben weiß. Deshalb ist es uns sehr wichtig, dass die neuen Besitzer bereits Erfahrung mit Herdenschutzhunden haben. Außerdem wäre es schön, wenn er einen Partner zum Spielen hätte, da er es als Einzelhund nicht kennt. Rudi ist selbstverständlich gechippt, geimpft und entwurmt.<br><br>Weitere Angaben: Rüde, EU-Heimtierausweis, entwurmt, gechipt, geimpft, nur für Hundeerfahrene, verträglich mit Katzen, Familienhund, kinderfreundlich.</div>
HTML"""

import lxml.html
tree = lxml.html.fromstring(data)
print (tree.xpath('//div[@itemprop="description"]/text()[not(position()=last())][preceding-sibling::*[2][self::br]][normalize-space()]'))

Output:

['Wunderschöner, sanfter Pyrenäenberghund Rüde schweren Herzens abzugeben. Rudi ist Anfang Juli letzten Jahres bei uns geboren und hat sich mittlerweile zu einem stattlichen jungen Mann entwickelt. Er ist ein total freundliches Kerlchen im Umgang mit seinen Mitmenschen, egal ob groß oder klein, und versteht sich auch mit Katzen und anderen Tieren wie auch z.B. Ziegen. Es kristallisierte sich auch schnell heraus, dass er der intelligenteste unserer 11 Welpen war. Sitz und Platz klappte innerhalb kürzester Zeit, da er sehr lernwillig ist. Er hat bis März bei uns gelebt und war dann für 1,5 Monate in einer anderen Familie, wo es aber leider Probleme innerhalb des Rudels gab und die neuen Besitzer ihn daher wieder zu uns gegeben haben. Es war aber nicht seine Schuld, dass es nicht funktioniert hat, er hat sich nicht falsch verhalten. Wir wünschen uns für ihn, dass er einen Platz findet, wo man die Eigenschaften eines Herdenschutzhundes zu schätzen und lieben weiß. Deshalb ist es uns sehr wichtig, dass die neuen Besitzer bereits Erfahrung mit Herdenschutzhunden haben. Außerdem wäre es schön, wenn er einen Partner zum Spielen hätte, da er es als Einzelhund nicht kennt. Rudi ist selbstverständlich gechippt, geimpft und entwurmt.']

測試確定:

編輯:XPath 解釋:

我們尋找特定 div 的子文本節點。 文本節點必須滿足以下條件:

  • 不是最后一個文本節點(排除“Weitere Angaben ...”)
  • 文本節點的第二個前置同級元素必須是 br 元素(以排除第一個文本元素,如 dog breed 和 statut)

這樣,XPath 表達式 select 是前兩個連續 br ( <br/><br/> ) 之后的文本節點,並在最后一個文本節點之前停止。

暫無
暫無

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

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