1

わかりました、タイトルは少しあいまいですが、私がやろうとしているのは、データをオンラインでダウンロードして解析し、解析された「データ」を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

答えを求めてフォーラムを見回しましたが、何も見つからなかったようです。私は初心者なので、何か基本的なことが抜けているかもしれませんか? 助けてくれてありがとう...

4

4 に答える 4

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うまくいくでしょうが、やむを得ない理由がない限り、グローバル名前空間を乱雑にするのではなく、正しい方法で物事を行う方法を学ぶべきだと思います

于 2012-04-28T23:56:44.857 に答える
2

コードには 3 つの問題があります。

  • メソッドを呼び出すたびに、新しい空のリストを作成しています。
  • list.appendNone(リストではなく)を返すため、現在1つの要素を含むリストは実際にはどこにも保存されていません。
  • 関数内の変数に代入すると、グローバル変数ではなく、ローカル変数が作成されます (キーワードで変数がグローバルであることを指定しない限り)。global

代わりにこれを試してください:

d = []

class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        d.append(data)

グローバル変数を使用するのも悪いスタイルです。dクラスの属性を作成し、より適切な名前を付けることを検討してください。

于 2012-04-28T23:55:21.837 に答える
0

globalモジュール スコープで名前をバインドする場合は、関数の先頭で onを使用する必要があります。

于 2012-04-28T23:55:08.823 に答える
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!']
于 2012-04-29T00:00:25.983 に答える