14

lxmlを使用してHTMLドキュメントを解析したいと思います。私はpython3.2.3とlxml2.3.4を使用しています(http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

を使用しetree.iterparseてドキュメントを解析していますが、次の実行時エラーが返されます。

Traceback (most recent call last):
  File "D:\Eclipse Projects\Python workspace\Crawler\crawler.py", line 12, in <module>
    for event, elements in etree.iterparse(some_file_like):
  File "iterparse.pxi", line 491, in lxml.etree.iterparse.__next__ (src/lxml\lxml.etree.c:98565)
  File "iterparse.pxi", line 512, in lxml.etree.iterparse._read_more_events (src/lxml\lxml.etree.c:98768)
TypeError: reading file objects must return plain strings

問題は、このランタイムエラーをどのように解決するかです。

どうもありがとうございます。

コードは次のとおりです。

from io import StringIO
from lxml import etree

some_file_like = StringIO("<root><a>data</a></root>")

for event, elements in etree.iterparse(some_file_like): #<-- Run-time error happens here
    print("%s, %4s, %s" % (event, elements.tag, elements.text))
4

1 に答える 1

24

StringIOバッファにはUnicode文字列があります。iterparseバイトを返すオブジェクトのようなファイルで動作します。次のバッファはiterparseで機能するはずです。

from io import BytesIO
some_file_like = BytesIO("<root><a>data</a></root>".encode('utf-8'))
于 2012-04-20T08:03:01.010 に答える