- 我提取的时网易2019年第二季度财报,pdf第14页的内容,pdf的网盘链接如下:链接: https://pan.baidu.com/s/1hXJGB8pl9jaJQ7hfzK7bWw 提取码: 7yc3
主要有两点需要说明:
1、使用pdfplumber提取单个表格时采用page.extract_page()和
使用pdfplumber提取多个表格时采用page.extract_pages()区别在于
假设每个表格只有三行,提取多个表时按照两个表计算
前者输出的列表[[第一行],[第二行],[第三行]]
后者输出的列表[[[第一行],[第二行],[第三行]],[[第一行],[第二行],[第三行]]]
大家发现了什么区别了吗?你循环遍历前者时,会输出每一行表格里的内容;你遍历后者时,会输出每一个表的内容,不要乱用!!!
2、输出提取的表格时,有时会出现空行,此时想把它删除掉该怎么办呢? 有时这一空行在列表中表示:[’’,’’,’’] ,都是空字符串;有时这一空行在列表中表示:[None,None,None] ,都是空值;有时这一空行在列表中表示:[’’,None,None] ,既有空字符串又有空值(此时按照出现的None来计算),所以很恶心,具体解决办法就是 你查看一下自己想提取的表格里 到底是出现哪种情况,然后再解决。
上代码,有兴趣的小伙伴可以操作一下
import PyPDF2
import pdfplumber
from openpyxl import Workbook
workbook=Workbook()
sheet=workbook.active
sheet.title='No13data'
workbook.create_sheet('No14data')
sheet1=workbook['No14data']
with pdfplumber.open('C:\\Users\\Administrator\\Desktop\\网易2019第二季度财报.pdf') as pdf:
table_page = pdf.pages[13]
table = table_page.extract_table(
table_settings={
"vertical_strategy": "text",
"horizontal_strategy": "text"
}
)
print(table)
for row in table:
if not (''.join([str(item) for item in row])) == ('NoneNoneNone'):
if not (''.join([str(item) for item in row])) == ('NoneNoneNoneNoneNoneNoneNoneNone'):
new_row = []
new_row.append(''.join([str(item) if item else '' for item in row[0:5]]))
for item in row[5:]:
if not item == None:
new_row.append(item)
sheet1.append(new_row)
workbook.save(filename='C:\\Users\\Administrator\\Desktop\\网易2019第二季度财报.xlsx')