0

特に例を理解しようとして、Dive into Python を読んでいます。また、list-urls.py についていくつか質問がありました。

最後の行では、「parser.urls」から URL のリストをコンパイルします。このデータはどこから来たのですか?URLLister または SGMLparser に urls メソッドがありません。

また、メソッド start_a が作成されましたが、使用されませんでした。これは何ですか?

完全なコードへのリンク。以下は要約版ですhttp://pastebin.com/EbB4micK

#!/usr/bin/python
"""Extract list of URLs in a web page"""

from sgmllib import SGMLParser
import sys

class URLLister(SGMLParser):
    def reset(self):
            SGMLParser.reset(self)
            self.urls = []

    def start_a(self, attrs):
            href = [v for k, v in attrs if k=='href']
            if href:
                    self.urls.extend(href)

if __name__ == "__main__":

    link = sys.argv[1]
    try:
            usock = urllib.urlopen(link)
            parser = URLLister()
            parser.feed(usock.read())
            parser.close()
            usock.close()
            for url in parser.urls: print url
4

3 に答える 3

1

これは属性であり、メソッド内でバインドおよび変更されます。

        self.urls = []

..。

                self.urls.extend(href)

start_a()はのプロトコルの一部であり、SGMLParserそのURLLister子孫です。

上記のメソッドをオーバーライドまたは拡張する以外に、派生クラスは、特定のタグの処理を定義するために、次の形式のメソッドを定義することもできます。入力ストリームのタグ名は大文字と小文字が区別されません。メソッド名に含まれるタグは小文字である必要があります。

于 2012-06-16T17:41:14.623 に答える
0

parser.urlsは、URLListerの「self.urls」です。「フィード」の内部と、それがURLListerで定義されたメソッドとどのように関連しているかを理解するには、sgmllib.SGMLParserのソースを調べる必要があります。

于 2012-06-16T17:42:14.810 に答える
0

start_a は、SGML パーサーが「a」タグを処理するために使用する関数です。SGML Parser docsの関数 start_tag を参照してください。parser.urls は単に URL を含むフィールドであり、start_a 関数によって入力されます。

于 2012-06-16T17:43:46.123 に答える