首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让python HTMLParser停止

问如何让python HTMLParser停止
EN

Stack Overflow用户
提问于 2014-12-18 05:15:27
回答 1查看 978关注 0票数 3

我有一个用例告诉您,当标记是link,而它的属性是rel=dns-prefetch时,只需说启用了预解析dns即可。

我已经将一个标志设置为pre_resolve_dns_enabled,并将其设置为true,如下所示。

代码语言:javascript
复制
class Extractor(HTMLParser):

    def __init__(self):
        HTMLParser.__init__(self)
        self.pre_resolve_dns_enabled = False

    def feed(self, data):
        HTMLParser.feed(self,data)

    def handle_starttag(self, tag, attrs):
        if tag == 'link' and ('rel', 'dns-prefetch') in attrs:
            self.pre_resolve_dns_enabled = True
            #Now if one dns is resolved so whole domain remains resolved , how do I tell the parser to abort now , leaving the flag to true.

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-18 05:40:06

HTMLParser不是设计用来停止的。为此,您需要使用像xml.sax或xml.etree.cElementTree这样的流解析器。

消化整个HTML文件真的是个问题吗?预期的用例如下:

代码语言:javascript
复制
extractor = Extractor()
... feed html to extractor using one or more .feed() calls ...
extractor.close()

if extractor.pre_resolved_dns_enabled:
  ...
else:
  ...

如果这确实是一个问题,您可以将输入的HTML分解成块,并提供给它们直到您找到您的标记,例如:

代码语言:javascript
复制
html = ...the html to parse...
chunks = [ html[i:i+1024] for i in xrange(0, len(html), 1024) ]
extractor = Extractor()
for c in chunks:
  if extractor.pre_resolved_dns_enabled:
    break
  extractor.feed(c)
extractor.close()
# check extractor.pre_resolved_dns_enabled
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27539659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档