-3
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()

我想解析 html 并在读取正确的行后写入文件,例如名称:Sonda 级别:bla bla 但我什至无法将其保存在文件中,因为我收到错误:TypeError:预期字符缓冲区对象

4

1 回答 1

1

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

>>> open('/tmp/test.txt', 'w').write(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: expected a character buffer object

teste.txt否则,您的读写尝试将失败;您不应文件对象视为迭代器 ( for line in fo) 并期望能够写入文件。文件迭代器使用预读缓冲区,您不知道您的写入将在文件中结束。

否则完全不清楚您要做什么。通常,您会编写一个HTMLParser在实例属性中收集数据的类的自定义子类。然后你调用.feed(),然后你从这些属性中收集你想要的任何东西。

您最好使用更简单的 HTML API,例如BeautifulSoup,它不需要您创建解析器子类,并且在处理简单的 HTML 提取任务时更容易使用。

于 2013-07-02T12:44:06.913 回答