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

文章介绍了如何利用Python库如PDFMiner和PyPDF2从PDF文件中提取含有特定关键字的页面,以解决证券公司IPO研究中的案例搜索问题。作者还展示了如何使用Scrapy爬虫下载证监会的招股说明书,并结合PDF解析技术进行内容筛选。
摘要由CSDN通过智能技术生成

-- 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 = 0

pattern = re.compile(“collinear”)

for page in PDFPage.create_pages(document):

interpreter.process_page(page)

# 接受该页面的LTPage对象

layout=device.get_result() # return text image line curve

for 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 url

urls = 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 item

def 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的一个重要功能–类的层级关系图,并将它与官方网站的模型图进行对比。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

g.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值