大数跨境
0
0

实用!python之pdf中提取表格数据

实用!python之pdf中提取表格数据 数据皮皮侠
2021-05-13
2
导读:点击 数据视觉PPman,选择加星标☆精彩内容不迷路哦很多时候我们在爬取pdf文件的数据时,会遇到pdf中很

点击 数据视觉PPman,选择加星标

精彩内容不迷路哦


很多时候我们在爬取pdf文件的数据时,会遇到pdf中很多表格的情况,而表格数据中往往有很多有价值的数据,因此需要我们抽取表格中的信息。因此,今天数据视觉PPman就为大家介绍如何提取PDF中的表格数据


根据遇到的表格数据,我们可以将表格类型分为两类,一类是图片型表格,另一类是文字型表格,因此根据不同类型的表格情况我们采取不同的爬取方法。


图片型表格

对于图片型表格需要用截屏软件把图片先存为图片形式 .jpg .png


首先,需要安装软件包

import pytesseractfrom PIL import Image import 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_i1    tiqu.insert(i,st)

最后就是数据读取

for i in range(len(tiqu)):    a=int(len(tiqu)/2)         first = tiqu[:a]    second = tiqu[a:]    #third =  tiqu[12:]    df = pd.DataFrame()    df[first[0]] = first[1:]    df[second[0]] = 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_VALUE
df = 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


让优秀的内容接近更多的人

长按二维码关注


发现“分享”“赞”了吗,戳我看看吧

【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读2.8k
粉丝0
内容2.1k