首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用xpath和python在包含不必要BR标记的标记之间提取文本?

如何使用xpath和python在包含不必要BR标记的标记之间提取文本?
EN

Stack Overflow用户
提问于 2020-06-11 19:23:35
回答 1查看 182关注 0票数 1

在div标签中,有文本我想提取,但在一个领先的介绍和页脚,这是不幸的在div内。

在文本的开头总是有3个BR标记,在文本的末尾总是有2个BR标记,在这两个BR标记之间的文本也可能与BR标记本身分开。

简单的示例如下所示:

代码语言:javascript
复制
   <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()

代码语言:javascript
复制
'<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,我也希望删除不需要的页眉/页脚。

代码语言:javascript
复制
response.xpath('string(//div[@itemprop="description"])').extract_first()

预期产出:

Wundersch ner,sanfter Pyren enberghund Rüde schweren abzugeben。作者声明:[ zu ]鲁迪,安芳,朱莉,贝贝,吉博伦,贝贝,米特尔维尔,祖爱伦,文森。作者声明: Er freundliches im Umgang mit seinen Mitmenschen,egal ob ob oder klein,und versteht sich mit Katzen und anderen Tieren wie auch z.B. Ziegen。施内尔赫劳斯,智囊团11世纪之战。书名: Sitz und Platz klappte innerhalb kürzester Zeit,da er sehr lernwillig ist.einer und Familie,wo es aber leider des Rudels gab和die中性es ihn daher wieder zu uns gegeben gab.战争,战争。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主义者,愚蠢的,愚蠢的,不折不扣的,不计其数的。Au erdem w re es sch n,wenn er einen Partner zum Spielen h tte,da er es als Einzelhund nicht kennt。作者声明: gechippt,gechippt.

预期搬迁:

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

如何删除前导文本和页脚文本,并提取其他文本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-11 23:49:27

您可以使用以下XPath:

代码语言:javascript
复制
//div[@itemprop="description"]/text()[not(position()=last())][preceding-sibling::*[2][self::br]][normalize-space()]

代码:

代码语言:javascript
复制
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()]'))

产出:

代码语言:javascript
复制
['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...")

  • the第二个前面的兄弟元素“,则
  • 不是最后一个文本节点,必须是br元素(要排除第一个文本元素,如狗、品种和状态)

这样,XPath表达式在前两个连续的br (<br/><br/>)之后选择文本节点,并在最后一个文本节点之前停止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62332003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档