如果语句在Python中不起作用

时间:2012-05-30 18:16:47

标签: python encoding module html-parsing

我尝试编写脚本来抓取我的网站 但我坚持在“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)

1 个答案:

答案 0 :(得分: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,attr [0]也是'src'。

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

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