我正在解析从链接列表返回的HTML。当我在每个HTML文档中到达某一点时,我会引发一个异常。在
import urllib2, time,
from HTMLParser import HTMLParser
class MyHTMLParser2(HTMLParser):
def handle_starttag(self, tag, attrs):
if somethings:
do somethings
if tag == "div" and "section2" in attrs[0][1]:
raise NameError('End')
parser2 = MyHTMLParser2()
cntr = 0
for links in ls:
try:
f = urllib2.urlopen(links)
parser2.feed(f.read())
cntr+=1
if cntr%10 == 0:
print "Parsing...", " It has benn", (time.clock()-start)/60, 'mins.'
break
except Exception, e:
print 'There has been an error Jim. url_check number', cntr
error_log.write(links)
continue
它只对第一个链接执行一次try语句,然后将exception子句执行到无穷大。在
一旦发生异常,我如何让它转到下一个链接
error_log
来自于它可能遇到的与urllib2
有关的其他错误,大多数情况下它们似乎无法足够快地连接到网页。因此,如果有一种方法可以在不引发异常的情况下退出{error_log
不应在出现异常的情况下停止解析器。解析是一个相当复杂的过程,通常,最好让解析器完成,收集所需的信息,并在解析器完成任务后处理这些信息。这样,您就可以将软件中的不同内容分离开来,使所有东西都更易于维护、调试和理解。在
不,您的诊断不正确,这里没有无限的异常循环。每个URL都是一个完全独立的例外。在
无论何时发生异常,
cntr
变量都不会更新,这可能会给您一个的印象,即您最终会进入异常循环。或者将cntr += 1
行移出try:
语句的,或者使用enumerate()
为您生成一个计数器。在也就是说,为什么要用一个解析器实例解析多个HTML页面?您经常得到的异常很可能是特定页面的格式不正确,并将解析器置于无法继续运行的状态。在
相关问题 更多 >
编程相关推荐