lxmlを使用して16MBのhtmlファイルを解析しようとしています。私の実際の仕事は、docno
タグの値が私の文書リストと一致すれば、すべての文書タグと各文書タグを取得することです。私はdocタグの内容を抽出します。lxml htmlパーサーが完全なファイルを解析しないのはなぜですか?
self.doc_file_list
は、解析する必要があるそのような16Mbファイルのパスを含むリストです。 fileはファイルの絶対パスです。
これは、私は現在、
for file in file(self.doc_file_list,'r'):
tree = etree.parse(file.strip(), parser)
doc = tree.findall('.//doc')
for elem in doc:
docno = elem.find('.//docno').text
if docno in self.doc_set:
print >> out, etree.tostring(elem)
私はetree.tostring(木)を使用して、ツリーの内容をチェックし、それは完全なファイルを解析し、唯一の実際のファイルのいくつかのキロバイトを解析していない使用していたコードです。
注:エラーメッセージは表示されませんが、ツリーの解析された内容が不完全なので、リスト全体を取得できません。
実際に編集で多くクリアされました。さて、問題がどこにあるのかを実際のサンプルファイルで確認すると助かります。または、交互に、解析を中止する場所を見つけて、問題があるかどうかを自分で判断してください。停止する前後の情報を削除するときに問題が解決するかどうかを確認します。最終的には、特定の問題のある構造に絞り込むことができます。 – spectras
...実際にはファイルサイズが問題であることが分かっている場合(小さなシステムの場合、libxmlで16MBのファイルを読み込むと通常〜100MBを読み込みます)、おそらくXmlTextReader APIを代わりに使用します。 – spectras