标题:数据抓取
只看楼主
Zz176543
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-3-25
结帖率:0
已结贴  问题点数:20 回复次数:7 
数据抓取
有没有方法能快速的从多页PDF中抓取特定的数据到EXCEL中?
搜索更多相关主题的帖子: 数据 快速 EXCEL 特定 方法 
2023-03-25 13:46
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:10 
要实现从多页PDF中抓取特定的数据到Excel中,需要使用Python中的一些第三方库和工具。以下是一种实现方案:
需要安装的库和工具如下:


    1.PyPDF2:用于读取PDF文件的内容
    2.pandas:用于处理和导出Excel文件
    3.tabula-py:用于从PDF中抓取表格数据

可以使用pip安装这些库和工具

读取PDF文件并抓取数据
使用PyPDF2读取PDF文件,并使用tabula-py从PDF中抓取表格数据。以下是一个读取PDF文件并抓取数据的示例代码:

程序代码:
import PyPDF2
import tabula
# 读取PDF文件
pdf_file = open('example.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
# 遍历PDF中的每一页并抓取表格数据
dataframes = []
for page_num in range(pdf_reader.getNumPages()):
    # 从PDF中抓取表格数据
    tables = tabula.read_pdf('example.pdf', pages=[page_num+1], lattice=True)
    # 将表格数据转换为DataFrame对象
    for table in tables:
        df = pd.DataFrame(table)
        dataframes.append(df)
# 关闭PDF文件
pdf_file.close()
# 合并所有DataFrame对象
result_df = pd.concat(dataframes)

在这个示例代码中,使用tabula.read_pdf函数从PDF中抓取表格数据。参数pages用于指定要抓取的页码,lattice参数用于指定是否使用网格模式来处理表格数据。


处理数据并导出Excel文件
使用pandas处理数据,并将结果导出到Excel文件中。以下是一个处理数据并导出Excel文件的示例代码:

程序代码:
# 处理DataFrame对象中的数据
result_df = result_df.dropna()  # 删除包含NaN值的行
result_df = result_df.astype(str)  # 将所有数据类型转换为字符串类型
# 导出数据到Excel文件
result_df.to_excel('result.xlsx', index=False)


完整代码

程序代码:
import PyPDF2
import pandas as pd
import tabula
# 读取PDF文件
pdf_file = open('example.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
# 遍历PDF中的每一页并抓取表格数据
dataframes = []
for page_num in range(pdf_reader.getNumPages()):
    # 从PDF中抓取表格数据
    tables = tabula.read_pdf('example.pdf', pages=[page_num+1], lattice=True)
    # 将表格数据转换为DataFrame对象
    for table in tables:
        df = pd.DataFrame(table)
        dataframes.append(df)
# 关闭PDF文件
pdf_file.close()
# 合并所有DataFrame对象
result_df = pd.concat(dataframes)
# 处理DataFrame对象中的数据
result_df = result_df.dropna()  # 删除包含NaN值的行
result_df = result_df.astype(str)  # 将所有数据类型转换为字符串类型
# 导出数据到Excel文件
result_df.to_excel('result.xlsx', index=False)


[此贴子已经被作者于2023-3-25 16:31编辑过]


会当凌绝顶,一览众山小.
2023-03-25 16:28
Zz176543
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-3-25
得分:0 

能从这种多页PDF中选取上述excel中的特定数据到Excel表格中吗?

[此贴子已经被作者于2023-3-25 20:22编辑过]

2023-03-25 20:18
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:0 
没有明白您的意思

会当凌绝顶,一览众山小.
2023-03-25 20:30
Zz176543
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2023-3-25
得分:0 
回复 4楼 东海ECS


需要从多页(50+.120-)的这个PDF文件中抓取这三项数据,导入excel中
2023-03-25 22:08
pvm2000
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:24
帖 子:159
专家分:256
注 册:2022-12-22
得分:10 
一页一页抓呗
2023-03-26 04:26
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:0 
回复 5楼 Zz176543



使用Python的PyPDF2库打开PDF文件。

程序代码:
import PyPDF2
pdf_file = open('file.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)



确定您要抓取数据的页面范围。例如,如果您要从第50页抓取数据,则可以使用以下代码:

page_num = 49  # 0-based index
page = pdf_reader.getPage(page_num)



使用PyPDF2的extractText()方法从页面中提取文本。

page_content = page.extractText()



使用Python的pandas库将数据加载到DataFrame中。

import pandas as pd
data = pd.read_csv('data.csv')


使用pandas的to_excel()方法将数据导出到Excel文件中。
data.to_excel('output.xlsx', index=False)

需要注意的是,PDF文件中的数据可能需要进行额外的清洗和处理,以确保数据的正确性和一致性。

会当凌绝顶,一览众山小.
2023-03-26 10:38
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:0 
您先把Excel表格样式做好,填入单元格就行了

会当凌绝顶,一览众山小.
2023-03-26 10:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511675-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.222876 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved