基本需求:现有保存在本地的多个离线网页,其网页布局结构基本相似。需要将其中有意义的文字提取出来保存成单独的文件。
思路分析:总体而言,而将此问题分成前后两个部分。第一部分是提取网页中的文字,可以使用BeautifulSoup库快速定位出需要保存的部分;第二部分是保存,使用Python自带的i/o功能即可。最后就是整体的运行逻辑,使用for循环遍历所有的网页文件,读取——提取——保存即可顺利完成。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import os import glob from bs4 import BeautifulSoup def filter(webpage): #抓取网页内容 file = open(webpage,encoding='utf-8') page = BeautifulSoup(file,'html5lib') content = page.find_all(name='p') #标签“p”可根据实际需要进行修改, for i in content[:]: #“p”适用率最高,但冗余信息也最多 content.remove(i) content.append(i.get_text()) #将BeautifulSoup的标签转化成字符串 return content def saver(filename,content): #保存文件部分 os.chdir('Info') #进入"Info"文件夹 file = open(filename,'a+',encoding='UTF-8') for i in content: try: file.write(i + '\n') #每行加上一个换行符 except TypeError: pass file.close() os.chdir('..') #回到上层目录 def main(): #主程序部分 os.mkdir('Info') #新建“Info”文件夹 files = glob.glob('*.htm*') #遍历获取本文件夹中所有的“htm”和“html”文件 for file in files: filename = file.replace('.html','.txt') #将html文件名转化成txt文件名 filename = filename.replace('.htm','.txt') content = filter(file) #读取网页 saver(filename,content) #保存网页 if __name__ == '__main__': main() |