我是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()
答案 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文件,我需要它们的所有文本,这给了我几秒钟的结果。