-2

我尝试编写一个脚本来抓取我的网站。
但我在“if 语句”处坚持第 15 行;它不做比较。
我认为这是一个编码问题,或者包含其他字符。我猜。
文档编码为 ANSI,网站为 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' 的元组。当我解析主 stackoverflow 页面时,我也没有得到任何 attr[0] 为 'src' 的元组 attr。

简而言之,问题在于第 18 行的 if 条件。

现在,我不太了解 html,无法知道 'src' 属性是否与<a>标签一起使用,但我通常会看到带有标签的 'src' 和带有<img>标签的 'href' <a>。因此,您可能希望将第 18 行更改为 if attr[0] == 'href'

于 2012-05-30T18:35:55.877 回答