点击 数据视觉PPman,选择加星标☆
精彩内容不迷路哦
很多时候我们在爬取pdf文件的数据时,会遇到pdf中很多表格的情况,而表格数据中往往有很多有价值的数据,因此需要我们抽取表格中的信息。因此,今天数据视觉PPman就为大家介绍如何提取PDF中的表格数据。
根据遇到的表格数据,我们可以将表格类型分为两类,一类是图片型表格,另一类是文字型表格,因此根据不同类型的表格情况我们采取不同的爬取方法。
图片型表格
对于图片型表格需要用截屏软件把图片先存为图片形式 .jpg或 .png
首先,需要安装软件包
import pytesseractfrom PIL import Imageimport pandas as pd
去掉换行符
pytesseract.pytesseract.tesseract_cmd = 'C://Program Files (x86)/Tesseract-OCR/tesseract.exe'tiqu = pytesseract.image_to_string(Image.open(r'C:\Users\Lenovo\Desktop\图片型.jpg'))#print(tiqu)tiqu = tiqu.split('\n')#while ' 'in tiqu:# tiqu.remove(' ')
一般表格只需要前面的步骤 ,如果表格内存在多行 会被读取成多个单元格
下面对这些单元格进行合并,并找到所有表格中的有 “-” 符号的表格,并存到新的表格中
lst = list(filter(lambda x: x.find("-") >= 0, tiqu))num = []for i in range(len(tiqu)):if tiqu[i] == lst[0]:if tiqu[i][-1] == '-':num.append(i)for i in num:st_i =tiqu[i]st_i1 =tiqu[i+1]del tiqu[i+1]del tiqu[i]st = st_i+st_i1tiqu.insert(i,st)
最后就是数据读取
for i in range(len(tiqu)):=int(len(tiqu)/2)first = tiqu[:a]second = tiqu[a:]#third = tiqu[12:]df = pd.DataFrame()= first[1:]= second[1:]#df[third[0]] = third[1:]
文字型表格
接下来就是,文字型表格数据提取,这种方法只适用于没有合并单元格的表格,具体的实现代码如下:
pdf = pr.open(r'C:\Users\Lenovo\Desktop\test.pdf')ps = pdf.pagespg = ps[0] #表格所在页面tables = pg.extract_tables() #获取页面所有表格table = tables[0] #获取第一个表格print(table)DEFAULT_VALUE = ''for i in table:for j in i:if j is None:j = DEFAULT_VALUEdf = pd.DataFrame(table[1:],columns = table[0])for i in range(len(table)):for j in range(len(table[i])):table[i][j] = table[i][j].replace('\n','')df1 = pd.DataFrame(table[1:],columns = table[0])#将表格数据存到dataframe中df.to_excel(r'C:\Users\Lenovo\Desktop\page2.xlsx')
如果表格中存在合并单元格 要用camelot库
这个库安装需要先安装ghostscript库和opencv库,
再 pip install camelot-py 进行安装,调用方式
import camelot.io as camelot
最后一步,读取数据就可以啦
file = r'C:\Users\Lenovo\Desktop\test.pdf'tables = camelot.read_pdf(file,flavor='stream')tables[0].to_csv(r"C:\Users\Lenovo\Desktop\hhh.csv")
以上就是数据视觉PPman为大家分享的内容,同时PPman还为大家准备好了完整的代码,需要的朋友根据下面👇的提示内容哦~
资源获取方式
关注本公众号,后台回复:表格数据
即可获取完整代码
数据视觉PPman
微信:ppman233
让优秀的内容接近更多的人
长按二维码关注
发现“分享”和“赞”了吗,戳我看看吧

