抓取多个网页中的文字

基本需求:现有保存在本地的多个离线网页,其网页布局结构基本相似。需要将其中有意义的文字提取出来保存成单独的文件。

 

思路分析:总体而言,而将此问题分成前后两个部分。第一部分是提取网页中的文字,可以使用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()