python - 陷入异常循环

标签 python html parsing

我正在解析从链接列表返回的 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 语句,然后将异常子句执行到无穷大。

一旦引发异常,如何让它转到下一个链接

error_log 来自于它会遇到的一些与 urllib2 相关的其他错误,大多数情况下它们似乎无法足够快地连接到网页。因此,如果有一种方法可以退出 HTMLParser2 而不引发异常,那就太好了。这样我就可以重新实现 error_log

最佳答案

不,你的诊断不正确,这里没有无限的异常循环。每个 URL 都是一个完全独立的异常(exception)。

每当出现异常时,cntr 变量都不会更新,这可能会给您一种最终陷入异常循环的印象。将 try: 语句的 cntr += 1移出,或者使用 enumerate() 生成为您准备的柜台。

也就是说,为什么要尝试使用一个解析器实例来解析多个 HTML 页面?您不断收到的异常很可能是特定页面格式错误并将解析器置于无法继续的状态。

关于python - 陷入异常循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910280/

相关文章:

Python比较操作,if和None

html - Font Awesome 5,为什么 Instagram 图标不见了?

javascript - 使用 javascript 将 HTML 代码添加到 div 中

html - 内联 SVG 仅缩放到 Google Chrome 中的父容器

list - mapMaybes/catMaybe 在 Windows 和 Ubuntu 中的工作方式不同

python - 使用 Python 解析 JSON

php - 解析 PHP 中的类、函数和参数

python - Gimp:如何使用 python 脚本将图像导出为没有颜色空间信息的 BMP?

python - ValueError 时间数据 'Fri Mar 11 15:59:57 EST 2016' 与格式 '%a %b %d %H:%M:%S %Z %Y' 不匹配

python - Mac Lion : Issue with opencv and python 2. 7.5