1

Beautiful Soup要素を繰り返し処理し、属性値を取得する必要があります。XMLドキュメントの場合:

<?xml version="1.0" encoding="UTF-8"?>

<Document>
    <Page x1="71" y1="120" x2="527" y2="765" type="page" chunkCount="25"
        pageNumber="1" wordCount="172">
        <Chunk x1="206" y1="120" x2="388" y2="144" type="unclassified">
            <Word x1="206" y1="120" x2="214" y2="144" font="Times-Roman" style="font-size:22pt">K</Word>
            <Word x1="226" y1="120" x2="234" y2="144" font="Times-Roman" style="font-size:22pt">O</Word>
        </Chunk>
     </Page>
</Document>

「Word」要素のx1値(206,226)を取得したいと思います。多くのappriciatedを助けてください!

編集:私は試しました:

for i in soup.page.chunk:
    i.word['x1']

エラーを返します:

File "C:\Python26\lib\site-packages\BeautifulSoup.py", line 473, in __getattr__
    raise AttributeError, "'%s' object has no attribute '%s'" % (self.__class__.__name__, attr)
AttributeError: 'NavigableString' object has no attribute 'word'

その間:

soup.page.chunk.word['x1']

正しく動作します...そして:

for i in soup.page.chunk:
    i.findNext(text=True)

要素からテキストを取得します。

4

1 に答える 1

3

これはそれほどエレガントではありませんが、機能しているようです。

for word in soup.page.chunk.find_all('word'):
    print word['x1']

ネストされたfind_allも機能するはずです。しかし、おそらくcssのようなselect(soupselectまたはfrom lxml)を使用する方が良いでしょう。

基本的に私が間違っていなければsoup.page.chunk、ノード、スープタグです。したがって、反復が必要な場合は、find_allを呼び出す必要があります。

upd。find_all('word')別のアプローチは、次のような条件でフィルタリングすることができますword.parent.name == 'smth'

[!] BeautifulSoup3(bs4ではない)findAllでは、find_all

于 2012-06-02T14:10:11.230 に答える