你是不是经常被PDF烦恼???

在现有库中,pdf的代码操作大致分为页面提取以及文字获取两个方面。在页面处理上,有pypdf2可以使用,在提取文本上有pdfminer可以处理。

这里举两个简单的例子:

1,利用pypdf提取pdf文件前5页文件:

from PyPDF2 import PdfFileReader, PdfFileWriter
import os
def split_pdf(infn, outfn):pdf_output = PdfFileWriter()with open(infn, 'rb')  as f:pdf_input = PdfFileReader(f)#页面数量page_count = pdf_input.getNumPages()print(page_count)# 将 pdf 前5页for i in range(5):pdf_output.addPage(pdf_input.getPage(i))with open(outfn, 'wb') as f:pdf_output.write(f)
def merge_pdf(pdf_folder, outfn):"""将多个文件合并为一个文件"""pdf_output = PdfFileWriter()#这里文件夹中只有pdf文件pdfs = os.listdur(os.path.join(pdf_folder))for infn in infnList:pdf_input = PdfFileReader(open(infn, 'rb'))# 获取 pdf 共用多少页page_count = pdf_input.getNumPages()print(page_count)for i in range(page_count):pdf_output.addPage(pdf_input.getPage(i))pdf_output.write(open(outfn, 'wb'))

2,根据关键字利用pdfminer获取文本,并返回该页面

例如,我想从一堆文本PDF文件中抽出某些含有关键字的文本,并返回带有这些关键字的页面,那么改如何处理?

# -*- coding: utf-8 -*-
"""
目标:从pdf文件中抽取出含有关键字的页面,并将这些页面合并一个新的pdf文件
"""
from PyPDF2 import PdfFileReader, PdfFileWriter
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.layout import *
from pdfminer.converter import PDFPageAggregator
fp = open('mypdf.pdf', 'rb')
import re
import os
#来创建一个pdf文档分析器
parser = PDFParser(fp)
#创建一个PDF文档对象存储文档结构
document = PDFDocument(parser)
# 检查文件是否允许文本提取
if not document.is_extractable:raise PDFTextExtractionNotAllowed
else:# 创建一个PDF资源管理器对象来存储共赏资源rsrcmgr=PDFResourceManager()# 设定参数进行分析laparams=LAParams()# 创建一个PDF设备对象# device=PDFDevice(rsrcmgr)device=PDFPageAggregator(rsrcmgr,laparams=laparams)# 创建一个PDF解释器对象interpreter=PDFPageInterpreter(rsrcmgr,device)# 处理每一页pageindex = []i = 0pattern = re.compile("collinear")for page in PDFPage.create_pages(document):interpreter.process_page(page)# # 接受该页面的LTPage对象layout=device.get_result()   # return text image line curvefor x in layout:if isinstance(x,LTText):if pattern.search(x.get_text()):pageindex.append(i)i +=1
pdf_output = PdfFileWriter()
pdf_input = PdfFileReader(fp)
# 获取 pdf 共用多少页
for  j in pageindex:pdf_output.addPage(pdf_input.getPage(j))
final_path =os.path.join(r"C:\Users\tc\Desktop\final.pdf")
with open(final_path,"wb") as f:pdf_output.write(f)
fp.close()

好吧,到此结束???很多人会说,这些有什么意思,我随便点击一下鼠标就完事了?

----------------------------------垃圾分割线-------------------------------------------

别急,以上仅仅作为演示,干货在下面

-----------干货1-------------

技术:文章的封面是经过笔者仔细研究pypdfminer之后做出的图,理清了该库的主要逻辑。

----------干货2---------------

场景:A君为证券公司IPO小兵,近来在研究[共同实际控制人]问题,然而,这问题并不常见,通过网络关键搜索-即使派上了全文搜索以及牛逼哄哄的google-以及肉眼式的轰炸,仅仅找到了几个老旧的案例。这显然不是A君要的东西,对此他苦恼不堪。难道就没有捷径?

有的,不过,捷径通常掌握在思考者手里!

我们来思考刚刚提到的窘境

问题:搜寻共同实际控制人案例

问题的根本解决之路:从众多IPO公司招股书中查找

手段:”人生苦胆,我学python“

思路:

1,利用爬虫下载证监会招股说明书--PDF格式文件

2,利用pdfminer解析文本,获取含有【共同实际控制人】招股书公司名字

PART ONE

以是下载证监会反馈意见scrapy项目的主要spider代码:

# -*- coding: utf-8 -*-
import scrapy
import  os
import  urllib.request
from scrapy.selector import Selector
from .tools import alreay_exit,create_worddoc,get_para
from .tools import get_start_urls
class YxplSpider(scrapy.Spider):name = 'yxpl'allowed_domains = ['http://www.csrc.gov.cn']start_urls = get_start_urls()exit_files = alreay_exit()def parse_page(self,response):final_dir =r"C:\Users\tc\PycharmProjects\yxpl\files"item = SeoItem()pre = "/".join(response.url.split("/")[:-1])title = response.xpath("//head/title/text()").extract()[0]item["title"] = title#to get the pdf urlurls = response.xpath('//div[@class="content"]/a/@href').extract()if len(urls) > 0:for j  in urls:final_url = pre + j[1:]   #最终网址if item["title"] not in self.exit_files:try:item["content"] =urllib.request.urlopen(final_url).read()file = open(os.path.join(final_dir, item["title"] + ".pdf"), mode="wb")file.write(item["content"])file.close()except urllib.request.HTTPError:print("Error with HTTPErro" + item["title"])else:print(title)return itemdef parse(self, response):pre  = r"http://www.csrc.gov.cn/pub/newsite/fxjgb/zrzfkyj/"urls =  response.xpath('//ul[@id="myul"]/li/a/@href').extract()for i in urls:new_url = "http://www.csrc.gov.cn/pub/" + "/".join(i.split("/")[3:]yield scrapy.Request(new_url,callback=self.parse_page,dont_filter=True)

PART TWO

2,返回含有关键子的文件名

对于下载好的PDF,仅仅只需要打开文件并对比关键字即可。由于过程简单,这里就不展示代码了。(实际上并不是我不愿意展示,而是因为运行速度太慢了!,一个400页的PDF大概需要一分多钟才能运行完毕,下载的文件有1500份,最少需要15个小时,so,python库确实 慢!慢!慢!)

含有【共同实际控制人】招股书名称截图

结语:对于PDF的操作介绍就到此结束。本文仅仅作为一种运用库展示代码编写过程,具体技术还需要有兴趣的朋友自己专研。

---------------ps-------------------

好吧,我还是透露在项目中发现的一个pycharm的一个重要功能--类的层级关系图,并将它与官方网站的模型图进行对比。

pycharm 层级图

官网 层级图

提示:层级关系图,可以比较快的把握库的层次关系,有利于摸清库的对象之间的关系

pdfminer的优势和劣势

优势

  • 提供页面上对象最底层的详细信息,使用者可以灵活使用这些信息,做进一步的加工

劣势

  • 运行速度慢
  • 无高阶api,用于特定场景,例如提取表格
  • 只能是文本类型的pdf,扫描版的pdf无效

其他pdf解析库

  • pdfplumber

基于pdfminer,用于提取表格信息

  • tabula-java

一个用java写的pdf解析器,用于提取表格信息

  • invoice2data

专门用于提取发票

  • camelot

基于tabula做解析,抽取表格信息

  • pdftabextract

基于ocr提取表格信息

最后祝大家天天进步!!学习Python最重要的就是心态。我们在学习过程中必然会遇到很多难题,可能自己想破脑袋都无法解决。这都是正常的,千万别急着否定自己,怀疑自己。如果大家在刚开始学习中遇到困难,想找一个python学习交流环境,可以加入我们,领取学习资料,一起讨论。

利用python处理pdf文本,帮我省下不少钱相关推荐

  1. python对excel筛选提取文本中数字_详解利用python提取pdf文本数字

    之前也不乏介绍过关于excel的内容,日常工作应用,除了excel,pdf也是经常使用的一种,关于pdf的文本提取,下面也来详细介绍~ 说明:从pdf文件中提取其他类型的数据,如文本或图像.将说明从p ...

  2. python提取pdf的数字_详解利用python提取pdf文本数字

    之前也不乏介绍过关于excel的内容,日常工作应用,除了excel,pdf也是经常使用的一种,关于pdf的文本提取,下面也来详细介绍~ 说明:从pdf文件中提取其他类型的数据,如文本或图像.将说明从p ...

  3. 利用python处理pdf文本_Python用于NLP :处理文本和PDF文件

    原标题:Python用于NLP :处理文本和PDF文件 提示:代码图片可以点击全屏查看,双指操作还可以放大缩小. 这是我的Python用于自然语言处理(NLP)系列文章的第一篇文章.在本文中,我们将从 ...

  4. 利用Python提取PDF文件中的文本信息

    如何利用Python提取PDF文件中的文本信息 日常工作中我们经常会用到pdf格式的文件,大多数情况下是浏览或者编辑pdf信息,但有时候需要提取pdf中的文本,如果是单个文件的话还可以通过复制粘贴来直 ...

  5. 如何用python修改pdf内容_如何利用python将pdf文件转化为txt文件?

    https://www.wukong.com/answer/6579491774144708872/?iid=15906422033&app=news_article&share_an ...

  6. 实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!

    来源/早起Python 本文将分享如何利用 Python 对 PDF 进行加密和解密操作,主要利用到之前多次介绍过的PyPDF2 模块. PDF 加密 在之前的文章PDF合并.拆分.水印.加密中简单提 ...

  7. 免费利用python把pdf格式转docx

    免费利用python把pdf格式转docx,再也不用wps等要钱办公软件转文档了,不多说,直接上代码 1.首先导入pdf包,通过pip安装 pip install pdfplumber 2.开发代码上 ...

  8. 利用python将PDF转为PPT(课件专用)

    利用python将PDF转为PPT(课件专用) 前言:课程中老师经常会将课件作为PDF发放而非PPT,而现有的PDF阅读器一般不支持添加修改等操作,所以显得十分麻烦,考虑将PDF转换为PPT格式,方便 ...

  9. python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍

    Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...

  10. 利用python处理txt文本,调整格式

    利用python处理txt文本 一 二 三 一 本文内容为:利用python字符串相关方法处理文本,调整格式.没有涉及刀正则方法. 二 具体任务为:将其中人名分离,每个单独一行, 待处理文本如下: ( ...

最新文章

  1. 详解Spring中Bean的自动装配~
  2. 100W无线电耦合功率测试实验
  3. 架构师之路 — API 经济 — RESTful API
  4. 获取SAP HR模块中员工照片及照片URL的方法
  5. Nginx+PHP-FPM——Nginx日志:[Primary script unknown] 网页:[file not found. ]解决方案
  6. 用Java排序的五种有用方法
  7. 状态模式(Unity中使用)
  8. 【LeetCode】【数组】题号:*665,非递减数列
  9. 宏正ATEN发行最新款双滑轨PS/2-USB双界面LCD控制端
  10. 有趣的c语言代码大全,分享一段有趣的小代码
  11. 机器学习算法概述——摘录《机器学习算法导论》
  12. matlab 函数教程,MATLAB函数 - Matlab教程
  13. spss分析方法-主成分分析
  14. 关于如何有效锻炼肌肉的十个小贴士(转)
  15. jQuery获取元素定位位置:给td添加选中样式
  16. 当小米MIX 2遇到iPhone X 你会怎么选?
  17. win10:谷歌浏览器如何导出扩展程序
  18. pytest文档56-插件打包上传到 pypi 库
  19. Mysql 多表联合更新
  20. Spring Task定时任务

热门文章

  1. 一、Java入门基础
  2. 中职计算机基础知识总结,中职计算机基础知识整理
  3. 代挂管家易开源7.4+web版
  4. 苹果鼠标滚轮驱动_苹果鼠标magic mouse在戴尔电脑Windows10系统上使用滚轮的方法...
  5. 遇到数学问题《深度学习》“花书”读不下去了吗?给你支个招
  6. 大麦路由器刷无线打印服务器,极路由2 大麦22D/203/204刷OPENWRT实现NDR客户端拨号 开机自启动 内网无法访问...
  7. 步进式解读Apache许可证
  8. 中国芯的ISSCC/JSSC之路
  9. Element-ui表格中图片放大简便方法
  10. 接口压力测试神器Jmeter