-2

サイトをクロールするスクリプトを作成しようとしています。
しかし、「if ステートメント」の 15 行目に固執しました。比較対象にはなりません。
エンコーディングの問題か、他の文字が含まれていると思います。私は推測する。
ドキュメントのエンコーディングは ANSI で、Web サイトは ISO-8859-15 です。

HParser.py:

from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint
import urllib2

url = 'http://DOMAIN.TLD'
req = urllib2.Request(url)
response = urllib2.urlopen(req)
the_page = response.read()

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        tag = unicode(tag)
        tag = tag.strip()
        print "'",tag,"'"
        if tag == 'a':
            for attr in attrs:
                if 'src' == attr[0]:
                    print 'Link: ', attr[1]

    def handle_endtag(self, tag):
        pass

    def handle_data(self, data):
        pass

    def handle_comment(self, data):
        pass

    def handle_entityref(self, name):
        pass

    def handle_charref(self, name):
        pass

    def handle_decl(self, data):
        pass

parser = MyHTMLParser()
parser.feed(the_page)
4

1 に答える 1

1

stackoverflow のメイン ページを URL として使用して、コードを少しテストしました。ここに私が見つけたものがあります:

1) tag == 'a''a' の場合、正しく True と評価されます。

2) attr は期待どおりにタプルを出力します。例えば:

('href', 'http://creativecommons.org/licenses/by-sa/3.0/')
('class', 'cc-wiki-link')

つまり、これが意味することは、最初の要素が 'src' であるタプルがまったくないということです。メインのスタック オーバーフロー ページを解析すると、attr[0] が 'src' であるタプル属性も得られませんでした。

つまり、問題は 18 行目の if 条件にあります。

現在、「src」属性がタグと一緒に使用されるかどうかを知るのに十分なほど html を知りませんが、<a>通常はタグ付きの「src」と<img>タグ付きの「href」が表示され<a>ます。そのため、代わりに18 行目を if に変更することをお勧めしますattr[0] == 'href'

于 2012-05-30T18:35:55.877 に答える