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