2

LXML Xpath 機能を使用していくつかの HTML パーサーを作成しています。うまく機能しているように見えますが、1つの大きな問題があります。

すべての HTML タグを解析すると、 tagsなど<p>を使用する単語があります。これらのタグを保持する必要があります。<b><i>

たとえば、HTML を解析するとき。

<div class="ArticleDetail">
    <p>Hello world, this is a <b>simple</b> test, which contains words in <i>italic</i> and others.
    I have a <strong>strong</strong> tag here. I guess this is a silly test.
    <br/>
    Ops, line breaks.
    <br/></p>

この Python コードを実行すると、

x = lxml.html.fromstring("...html text...").xpath("//div[@class='ArticleDetail']/p")
for stuff in x:
    print stuff.text_content()

これはうまくいくように見えますが、p だけではなく、他のすべてのタグを削除します。

出力:

Hello world, this is a simple test, which contains words in italic and others.
I have a strong tag here. I guess this is a silly test.
Ops, line breaks.

ご覧のとおり、<b><i>および<strong>タグがすべて削除されています。とにかくそれらを保つことができますか?

4

1 に答える 1

3

現在、HTML コンテンツ (タグを含む) ではなく、テキスト コンテンツのみを取得しています。

代わりに、XPath 一致のすべての子ノードを取得する必要があります。

from lxml import etree

x = lxml.html.fromstring("...html text...").xpath("//div[@class='ArticleDetail']/p")
for elem in x:
    for child in elem.iterdescendants():
        print etree.tostring(child)
于 2012-09-05T13:28:23.583 に答える