python html解析器不返回结果?

时间:2015-10-20 07:35:42

标签: python-2.7 html-parsing

我是python的新手,我有一个下载的html文件的文件夹,我需要从中提取文本数据并将其输出到与文本文件相同的文件夹中,下面的代码适用于单个文件,但是当我是试图传递多个文件它不起作用。请提出解决方案,我将非常感激。它甚至没有给我任何错误,所以我可以解决它并找出一些解决方案。

    from HTMLParser import HTMLParser
    from re import sub
    from sys import stderr
    from traceback import print_exc
    import glob
    import os


    class _DeHTMLParser(HTMLParser):
        def __init__(self):
             HTMLParser.__init__(self)
             self.__text = []

        def handle_data(self, data):
            text = data.strip()
            if len(text) > 0:
                text = sub('[ \t\r\n]+', ' ', text)
                self.__text.append(text + ' ')

        def handle_starttag(self, tag, attrs):
             if tag == 'p':
                 self.__text.append('\n\n')
             elif tag == 'br':
                 self.__text.append('\n')

        def handle_startendtag(self, tag, attrs):
            if tag == 'br':
                self.__text.append('\n\n')

        def text(self):
            return ''.join(self.__text).strip()


    def dehtml(text):
        try:
            parser = _DeHTMLParser()
            parser.feed(text)
            parser.close()
            return parser.text()
        except:
            print_exc(file=stderr)
            return text
    def main():
        dir_path = r"/home/maitreyee/Downloads/SchoolCollege.com/multiple_states/"
        results_dir = r"/home/maitreyee/Downloads/SchoolCollege.com/"
        for file_name in glob.glob(os.path.join(dir_path, "*.html")):
            text = open(file_name, "r")
            results_file = os.path.splitext(file_name)[0] + '.txt'
            with open(results_file, 'w') as outfile:
                i = dehtml(text)
                print(i)
                outfile.write(i + '\n')



    if __name__ == '__main__':
        main()

1 个答案:

答案 0 :(得分:0)

我挣扎了很多,然后尝试了一些更简单的东西,对于上面的代码,我们可以通过以下代码修改main()函数,然后这将返回所有html文件的.txt文件,我们只需要传递文件夹位置。

    def main():
        dir_path = r"/home/maitreyee/Downloads/SchoolCollege.com/rajasthan_data/"
        results_dir = r"/home/maitreyee/Downloads/SchoolCollege.com/rajasthan_data/"
        for file_name in glob.glob(os.path.join(dir_path, "*.html")):
            f = open(file_name)
            text = f.read()
            results_file = os.path.splitext(file_name)[0] + '.txt'  
            with open(results_file, "w") as fp:
                fp.write(dehtml(text))
                fp.close()

在给出目录路径的位置,然后将目录路径放入html文件的文件夹中。这对我真的很有帮助,因为我必须转换数百个html文件,我需要它们的所有文本,这给了我几秒钟的结果。