2

Beautiful Soup は十分に効率的ではないため、 pure を使用しようとしていますlxml。ただし、 にlxml.html.fromstringはバグがあります (しばらくすると突然 100% の RAM を消費しますfromstring)。

API で他のモジュールを使用できますか? 私はそれを理解することができません.インターネット上には驚くほどゼロに近い例があります.

これは私が今やっていることですが、私が言ったように、次のものを置き換える必要がありますfromstring:

        mySearchTree = fromstring(data)
        metas = {}
        n = -1
        for a in mySearchTree.cssselect('meta'):
            n += 1
            metas[n] = {}
            for b in a.items():
                metas[n][b[0]] = b[1]
        y = 0
        tag = []
        for m in metas:
            if 'property' in metas[m] and 'content' in metas[m]:
                if 'og:' in metas[m]['property']:
                    y += 1
                    tag.append({metas[m]['property'] : metas[m]['content']})

        for x in tag:
            for y in x:
                #print '%s ==> %s' % (y, x[y])
                self.rj[y] = x[y]

どんなポインタでも大歓迎です!

4

1 に答える 1

2

通常、OpenGraph タグは HTML ドキュメントの先頭にあるため、入力ファイルの一部しか読み取って解析できませんでした。部品HEADが巨大になる可能性は非常に小さいと思います (ただし、サンプルによっては、調査によって異なる意見が導かれる可能性があります)。

  1. チャンク サイズを設定します (例: 1024 バイト)。
  2. バッファに(または、またはなど) が存在するまで、入力ファイルをチャンク ( のようなものstream.read(1024))ごとに読み取ります。制限を決定する - 入力が破損していてヘッダーがない場合に備えて最大で読み取るバイト数。大量のメモリを消費するのに十分なほどすぐにあきらめることができます。</head></HEAD><body>
  3. パーサーを使用lxml.htmlして、バッファリングしたフラグメントを読み取ります (有効ではありませんが、問題ではなく、lxml対処でき、目標には影響しません)。
  4. lxmlこれで、HTML ファイルの head を持つDOM オブジェクトができました。これは効率的に作成され、過度のメモリ消費のリスクはありません。任意の検索、抽出などを行うことができxpathます。
于 2013-04-19T07:40:43.590 に答える