Python TypeError:写入分析结果时应为字符缓冲区对象

Python TypeError:写入分析结果时应为字符缓冲区对象,python,html-parsing,Python,Html Parsing,我想解析html并在读取正确的行后写入文件,例如Name:Sonda-Level:bla-bla 但我甚至无法将其保存到文件中,因为我得到了错误:TypeError:需要字符缓冲区对象您得到错误是因为HTMLParser.feed()返回None;不能将None写入文件: import requests from HTMLParser import HTMLParser class MyHTMLParser(HTMLParser): def handle_data(self, data

我想解析html并在读取正确的行后写入文件,例如Name:Sonda-Level:bla-bla
但我甚至无法将其保存到文件中,因为我得到了错误:TypeError:需要字符缓冲区对象

您得到错误是因为
HTMLParser.feed()
返回
None
;不能将
None
写入文件:

import requests
from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        return data

def criapagina():
    r = requests.get('http://shadowcores.twifysoft.net/character.php?name=Sonda+Aquatica')
    fo = open('teste.txt', 'w')
    fo.write(r.content)
    print fo.readline
    fo.close()

def lepagina():
    fo = open('teste.txt', 'r+')
    for line in fo:
        parser = MyHTMLParser()
        fo.write(parser.feed(line))
        fo.close()


lepagina()
打开('/tmp/test.txt',w')。写入(无) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:应为字符缓冲区对象 否则,您尝试读取和写入
teste.txt
将失败;您应该而不是将文件对象视为迭代器(
表示fo中的行
),并期望能够写入文件。文件迭代器使用一个预读缓冲区,您不知道写入操作将在文件中结束

否则,你想做什么就完全不清楚了。通常,您会编写一个
HTMLParser
类的自定义子类来收集实例属性中的数据。然后调用
.feed()
,然后从这些属性中收集所需的内容


您最好使用一个更简单的API for HTML-like,它不需要您创建解析器子类,并且在处理简单的HTML提取任务时更易于使用。

您的读写同时会失败;您没有试图控制在
teste.txt
中写入解析器结果的位置。您想做什么?此外,您是否检查了
parser.feed()
返回的内容?这是肯定的,它不是一个字符串。你从来没有调用过
criapagina
<代码>请求在这里根本不被使用。我以前打过电话给criapagina:P,所以我准备好了测试。TXT正如马丁所说,返回类型是none,但是你可以尝试将系统重定向到文件中,这肯定会起作用,否则建议你使用Beautiful Soup:)
>>> open('/tmp/test.txt', 'w').write(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object