0

コードは次のとおり です。HTMLタイトルタグのコンテンツに基づくPythonifステートメント

from HTMLParser import HTMLParser

def titleFinder(html):
    class MyHTMLParser(HTMLParser):
        def handle_starttag(self, tag, attrs):
            self.intitle = tag == "title"
        def handle_data(self, data):
            if self.intitle:
                self.title = data

    parser = MyHTMLParser()
    parser.feed(html)
    return parser.title

>>> print titleFinder('<html><head><title>Test</title></head>'
                '<body><h1>Parse me!</h1></body></html>')
Test

ただし、以下のコードを実行すると、次のエラーメッセージが表示されます。

AttributeError:MyHTMLParserインスタンスに属性'intitle'がありません

エラーメッセージを修正するにはどうすればよいですか?何か案は?

コード:

from HTMLParser import HTMLParser
import urllib2

def titleFinder(html):
    intitle = False
    class MyHTMLParser(HTMLParser):
        def handle_starttag(self, tag, attrs):
            self.intitle = tag == "title"
        def handle_data(self, data):
            if self.intitle:
                self.title = data

    parser = MyHTMLParser()
    parser.feed(html)
    return parser.title

response=urllib2.urlopen("https://stackoverflow.com/questions/13680074/attributeerror-xx-instance-has-no-attribute-intitle")
html= response.read()
print titleFinder(html)

トラックバックは次のとおりです。

Traceback (most recent call last):
  File "D:\labs\test.py", line 19, in <module>
    print titleFinder(html)
  File "D:\labs\test.py", line 14, in titleFinder
    parser.feed(html)
  File "C:\Python27\lib\HTMLParser.py", line 108, in feed
    self.goahead(0)
  File "C:\Python27\lib\HTMLParser.py", line 142, in goahead
    if i < j: self.handle_data(rawdata[i:j])
  File "D:\labs\test.py", line 10, in handle_data
    if self.intitle:
AttributeError: MyHTMLParser instance has no attribute 'intitle'

[アップデート]

私はついに問題を解決しました!ありがとう、Martijn Pieters!

from HTMLParser import HTMLParser
import urllib2

def titleFinder(html):
    class MyHTMLParser(HTMLParser):
        def __init__(self):
            HTMLParser.__init__(self)
            self.title = ''
            self.intitle = False  #!!!
        def handle_starttag(self, tag, attrs):
            self.intitle = tag == "title"
        def handle_data(self, data):
            if self.intitle:
                self.title = self.title+data #!!!

    parser = MyHTMLParser()
    parser.feed(html)
    return parser.title

response=urllib2.urlopen("https://stackoverflow.com/questions/13680074/attributeerror-xx-instance-has-no-attribute-intitle")

html= response.read()
print titleFinder(html)
4

1 に答える 1

1

handle_dataメソッドは呼び出される前に呼び出され、その時点では属性は設定されていませhandle_starttagん。intitle

intitle = Falseクラスに追加するだけです。

class MyHTMLParser(HTMLParser):
    intitle = False

    # your methods

handle_dataは、空白を含むドキュメント内のすべてのテキストノードに対して呼び出されるため、前に呼び出されることはそれほど珍しいことではありませんhandle_starttag

于 2012-12-03T09:11:49.643 に答える