正在加载...

网页解析3 - 分析网页内容(上)

上篇讲明了如何解析标签。有了上篇的基础。我们要做的事情就是解析这个html的内容了。

根据以往的解析xml的经验,可以采用sax的方式。这样更加清晰,代码也更加好写。

我们的设计是有一个 HtmlHandler 和 HtmlParser。有HtmlHandler里面保留html的可见内容。而HtmlParser进行真正的解析。

目前,需求就是解析网页的内容。不需要里面的标签。所以,我们只需要有一个简单的HtmlHandler就可以了。

html_handler.py

#coding=utf-8

class HtmlHandler(object):
    """
    拿到标签后,进行相应处理的handler
    """
    def __init__(self, handle_comment=False, handle_text=True):
        self.handle_comment = handle_comment
        self.handle_text    = handle_text
        self.script = False
        self.style  = False
        self.html_list = []

    def start(self, name, value, position):
        if name.lower() == 'style':
            self.style = True

        if name.lower() == 'script':
            self.script = True

    def end(self, name, value, position):
        if name.lower() == 'style':
            self.style = False

        if name.lower() == 'script':
            self.script = False

    def comment(self, text, position):
        if not self.script and not self.style:
            self.html_list.append(text)

    def text(self, text):
        if not self.script and not self.style:
            self.html_list.append(text)

    def finish(self):
        pass

    def get_html_exclude_script(self, connect_mark):
        return connect_mark.join(self.html_list)

    def clear_memory(self):
        self.html_list = []

就像上面代码那样,我们通过 handler.text 方法来text的追加。最后调用 gethtmlexcludescript就可以拿到网页的内容了 篇幅有限,请各位看下篇关于 htmlparser 的代码