Windows环境下pdf2htmlEX+HTMLParser完成对pdf中数据的提取

首先要将pdf中表格数据提取,是比较难以写的,于是想到可以将pdf转成html,再用python中htmlparser爬取html文本中的数据,这其中的方法相对而言较为简单。

首先是使用pdf2htmlEX,下载好后压缩文件解压后,可看到其中有pdf2htmlEX.exe文件,在命令行中输入pdf2htmlEX.exe可看到其后面可以添加的各种参数以及用法,我们输入pdf2htmlEX -f 2 example.pdf example.html,可将example.pdf从第二页开始到最后一页转为example.html文件。

接着上python代码,利用全局变量,控制数据的爬取,因为我要爬取的是表格数据,所以只需要一个学校名字,以及两个数字,一个百分数。

from  html.parser import HTMLParser
import string
htmlFile = open(r'D:\pdf2htmlEX-win32-0.14.6-upx-with-poppler-data\2013_table_wrapperqingnian.html','r',encoding='UTF-8')
content = htmlFile.read()
lists = [
       '安徽中医药大学', '北京中医药大学', '辽宁中医药大学', '长春中医药大学', '黑龙江中医药大学', '天津中医药大学',
       '南京中医药大学', '上海中医药大学', '山东中医药大学', '山西中医学院', '浙江中医药大学', '江西中医药大学',
       '福建中医药大学', '湖南中医药大学', '湖北中医药大学', '广州中医药大学', '广西中医药大学', '贵阳中医学院',
       '成都中医药大学', '云南中医学院', '陕西中医学院', '河南中医学院', '甘肃中医学院','河北中医学院'
   ]
# 云南中医学院,甘肃中医学院,河北中医学院
global flag,count,strschool,listschool
flag = False
count = 0
strschool = ''
listschool = []

class MYHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print('Encountered a start tag :',tag)

    def handle_endtag(self, tag):
        print('Encountered an end tag :',tag)

    def handle_data(self, data):
        print('Encountered some data :',data)
        global flag,strschool,count,listschool
        if data in lists:
            flag = True
            strschool = strschool + data + ' '
        else:
            if flag == True and (data.isdigit() or data[-1] == '%'):
                strschool = strschool + data + ' '
                count += 1
                if count == 3:
                    listschool.append(strschool)
                    count = 0
                    flag = False
                    strschool = ''
parser = MYHTMLParser()
parser.feed(content)
for x in listschool:
    print(x)

你可能感兴趣的:(python)