首先要将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)