好的,标题有点模糊,但我要做的是在线下载数据,解析它然后将解析后的'数据'放入excel文件中。
我在试图将数据放入矢量或列表时遇到困难。请注意,数据可以是单词或数字。另外,我的数据长度未知。我尝试了下面的代码:
class MyHTMLParser(HTMLParser):
def handle_data(self, data):
d=[]
d=d.append(data)
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
'<body><h1>Parse me!</h1></body></html>')
d
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
d
NameError: name 'd' is not defined
我环顾了论坛寻找答案,但似乎没有遇到任何问题。我是初学者,所以我可能会遗漏一些基本的东西吗?谢谢你的帮助...
答案 0 :(得分:4)
在类方法中,您需要使用self
来引用成员变量。
从这样的事情开始可能更有意义:
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.d = []
def handle_data(self, data):
self.d.append(data)
然后,要访问d
,您需要指定类实例,例如
parser.d
编辑: global
会有效,但除非有令人信服的理由,否则我认为你应该学会如何以正确的方式做事而不是混淆全局命名空间
答案 1 :(得分:2)
您的代码存在三个问题。
list.append
返回None
(不是列表),因此现在包含一个元素的列表实际上并未存储在任何位置。global
的全局变量关键字)。请改为尝试:
d = []
class MyHTMLParser(HTMLParser):
def handle_data(self, data):
d.append(data)
使用全局变量也是一种糟糕的风格。您可能需要考虑将d
作为该类的属性,并为其提供更好的名称。
答案 2 :(得分:0)
如果要在模块范围内绑定名称,则需要在函数开头使用global
。
答案 3 :(得分:0)
这是你在找什么?
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
data = []
def get_data(self):
return self.data
def handle_starttag(self, tag, attrs):
pass
def handle_endtag(self, tag):
pass
def handle_data(self, data):
self.data.append(data)
# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
'<body><h1>Parse me!</h1></body></html>')
print 'All data', parser.get_data()
输出:
All data ['Test', 'Parse me!']