爬虫实战_中国电力设备_从pdf中提取数据

 代码

import os
import pdfplumber
import re
import pandas as pd

# 正则表达式模式
patterns = {
    "招标人": r"招\s*标\s*人:\s*(.*?)\n",
    "代理机构": r"代\s*理\s*机\s*构:\s*(.*?)\n",
    "地址": r"地\s*址:\s*(.*?)\n",
    "联系人": r"联\s*系\s*人:\s*(.*?)\n",
    "电话": r"电\s*话:\s*(.*?)\n",
    "邮箱": r"(?:邮\s*箱|邮\s*件|E-mail):\s*(.*?)\n",
}

def extract_info_from_pdf(pdf_path):
    with pdfplumber.open(pdf_path) as pdf:
        text = ""
        for page in pdf.pages:
            text += page.extract_text() + "\n"  # 提取每一页的文本

        if not text:
            return {"标题": "未找到", **{key: "未找到" for key in patterns}}

        # 提取标题(假设标题为第一页的前几行文本)
        first_page_text = pdf.pages[0].extract_text()
        lines = first_page_text.split('\n')
        title_lines = []
        for line in lines:
            if line.strip():
                title_lines.append(line.strip())
            if len(title_lines) >= 4:  # 可以根据需要调整行数
                break
        title = ' '.join(title_lines).strip()

        # 提取其他信息
        extracted_info = {"标题": title}
        for key, pattern in patterns.items():
            match = re.search(pattern, text, re.MULTILINE)
            extracted_info[key] = match.group(1).strip() if match else "未找到"

        return extracted_info

# 批量处理PDF文件
pdf_directory = 'pdf'  # PDF文件所在目录
output = []

for pdf_file in os.listdir(pdf_directory):
    if pdf_file.endswith('.pdf'):
        pdf_path = os.path.join(pdf_directory, pdf_file)
        info = extract_info_from_pdf(pdf_path)
        info["文件名"] = pdf_file
        output.append(info)

# 将数据保存到Excel表格中
df = pd.DataFrame(output)
excel_path = os.path.join(pdf_directory, 'extracted_info.xlsx')
df.to_excel(excel_path, index=False)

print(f"信息已保存到 {excel_path}")

分析

标题

标题从第一页中匹配

 招标人、代理机构、地址、联系人、电话、邮箱

全文匹配,因为有的可能不是在最后一页

邮箱有可能是邮箱、邮件、E-mail,所以代码中的正则表达式用

"邮箱": r"(?:邮\s*箱|邮\s*件|E-mail):\s*(.*?)\n",

邮箱或邮件或E-mail

再者邮箱二字之间可能有空格用  \s* 来进行匹配

不止邮箱,其他的字段中也可能有空格,都用 \s* 来进行匹配

结果展示 

保存到execl表格中,看着方便

保存的时候带着pdf的文件名,方便查找

比如16.pdf这个文件的邮箱未找到

我们就可以打开16.pdf文件进行查找

经过观察,文件中未提到邮箱,邮件,E-mail等信息,即没有邮箱

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值