当前位置:文档之家› 综合案例二:通过PDF文本解析分析上市公司理财公告

综合案例二:通过PDF文本解析分析上市公司理财公告

分析上市公司理财公告10.1 巨潮资讯网理财公告PDF批量下载实战10.2 PDF文本解析基础10.3 PDF文本解析实战-寻找合适的理财公告分析上市公司理财公告上一章最后一节讲了巨潮资讯网理财公告信息的爬取实战,其中还有些地方可以完善:•如爬取多页内容•自动筛选所需内容•比如只要2018年的数据•以及完成理财报告PDF的批量自动下载在这一小节就把这些知识点进行分析讲解。

10.1.1 爬取巨潮资讯网多页内容在巨潮资讯网上批量爬取多页没有办法用之前爬取普通网站多页的手段:修改网url进行处理,因为翻页操作的时候,网址的链接并没有发生变化。

此时解决办法为利用selenium来模拟鼠标点击下图所示的“下一页”按钮,并根据公告数量来确定模拟点击次数,每点击完就获取一下该页的网页源代码,最后把获取到的各页的源代码放到一个列表里。

10.1.1 爬取巨潮资讯网多页内容首先来完成自动模拟点击按钮的操作,这个和8.2.4节讲过的模拟点击“百度一下”那个按钮的道理是一样的,只要获取到这个“下一页”按钮的xpath内容,就可以用selenium进行模拟点击了。

方法如下:1.在网页上利用F12调出开发者工具2.然后选中翻页按钮对应的位置3.右键选择Copy4.然后选中Copy Xpath5.把Xpath内容复制到代码里即可10.1.1 爬取巨潮资讯网多页内容把Xpath内容复制到代码里以后,组合的代码如下:10.1.1 爬取巨潮资讯网多页内容把Xpath内容复制到代码里以后,组合的代码如下:注意点:运行之后发现它已经可以自动翻页跳转到第二页了,这边引入time 模块,在访问网址后写一个time.sleep(3),一是为了方便演示点击翻页的过程,二是防止浏览器页面还处于刷新阶段。

10.1.1 爬取巨潮资讯网多页内容那如果想要把所有的内容都获取下来该如何处理呢,比如这边数万条理财公告的信息。

1.我们只需要获取到所有公告的数量,这个数量在网页上的右下角有显示2.然后因为巨潮资讯网每页是显示十条内容,所以把这个数量除以十,那么就是我们需要翻页的次数了3.利用F12和观察源代码可以发现该数量的正则规律如下:10.1.1 爬取巨潮资讯网多页内容获取公告条数和一共多少页的页数的完整代码如下:10.1.1 爬取巨潮资讯网多页内容在我们从前面的代码中获得页数之后,可以进行自动翻页:下面要把datas这个列表转换成字符串,使用.join(列表名)的方式可以把列表转换成字符串。

因为只有在字符串中才能提取想要的各个页面的公告标题,下载地址,日期等信息。

加完.join(datas) 如下:10.1.1 爬取巨潮资讯网多页内容我们可以使用从第9.4章中的代码提取标题,下载地址,日期:10.1.1 爬取巨潮资讯网多页内容我们可以使用从第9.4章中的代码来清洗标题,下载地址,日期:10.1.1 爬取巨潮资讯网多页内容打印出的标题,下载地址,日期如下:10.1.2 自动筛选所需内容如说这里只想要日期为2019年和2020年的内容。

这里可以通过if()语句把不符合条件的内容都赋值为空字符串,如果符合条件的,则让它等于原来的值,这和第五章数据清洗的相关代码类似,代码如下:10.1.2 自动筛选所需内容我们利用while循环遍历这些个列表,一旦发现有某个元素是空字符串,就直接用列表.remove(元素)的办法把这些空字符串给剔除掉。

代码如下:10.1.2 自动筛选所需内容我们还可以使用类似的方法在标题中查找关键字,并删除不包含关键字的任何标题,列如下:10.1.3 理财公告PDF的自动批量下载如下图所示,对于一个刚刚获取到的PDF下载地址:/new/disclosure/detail?orgId=jjjl0000090&an nouncementId=1207206145&announcementTime=2019-12-27,我们需要做的就是让selenium模拟点击一下下图的下载按钮即可:10.1.3 理财公告PDF的自动批量下载我们使用f12方法查找xpath或ccs_selector代码:获取的xpath代码10.1.3 理财公告PDF的自动批量下载运行结果如下,可以看到已经可以实现PDF的自动下载了:10.1.3 理财公告PDF的自动批量下载那如何来实现批量下载呢,其实只要写一个for循环即可。

我们之前已经获得了一个下载链接的列表href,利用for循环遍历该列表,就能实现把列表里所有的内容都下载下来了,代码如下:批量下载实战10.1 巨潮资讯网理财公告PDF我们可以使用for函数告诉我们是否有要下载的pdf,如下所示:想要深入到PDF正文内容进行分析的话,就需要用到PDF文本解析技术。

Python中有多个可以用于解析PDF文本的库,如:•pdfplumber库•pdfminer库•tabula库•等经笔者测试pdfplumber库是目前使用最方便的库,而且pdfplumber库不仅可以解析文字,还可以方便的解析PDF文件中的表格。

10.2.1 pdfplumber库的安装这里推荐pip安装法安装pdfplumber库,和之前讲过的pip安装法一样:1.Win + R调出运行框2.输入cmd后点击确定3.然后在弹出的控制台里输入“pip install pdfplumber”4.按一下Enter回车键,等待安装结束即可注意点:如果一直安装不成功,可以使用清华镜像镜像安装,代码如下:10.2.2 pdfplumber库提取文本内容pdfplumber库的使用方法非常简单,通过pdfplumber库的extract_text()方法就可以解析PDF文件第一页的文本内容了,代码如下:10.2.2 pdfplumber库提取文本内容如果想解析每一页的内容,那么通过for循环语句即可实现,代码如下:10.2.3 pdfplumber库提取表格内容pdfplumber库还可解析文档中的表格,在演示文档“公司A理财公告.PDF”第4页有如下图所示的表格内容:10.2.3 pdfplumber库提取表格内容通过pdfplumber库的extract_tables()方法就可以提取页面中的表格,代码如下:10.2.3 pdfplumber库提取表格内容注意:通过extract_tables()返回的tables是该页的全部表格,其是一个列表。

因为第四页只有一个表格,所以可以通过tables[0]来提取第一个也即唯一的表格,运行效果如下:10.2.3 pdfplumber库提取表格内容我们可以通过第六章讲过的pandas库使得最终的展现效果更加好看一些,代码如下,其中table[0]即是表头信息,table[1:]为第二行及其以下的内容:获得的表格df如下图所示:10.2.3 pdfplumber库提取表格内容此时获得的表格存在一些换行符\n,这个是因为在原表格中这些字符之间是存在换行的,如果想把这些换行符去掉,可以采用replace()函数将换行符替换掉,代码如下:10.2.3 pdfplumber库提取表格内容此时获得的表格存在一些换行符\n,这个是因为在原表格中这些字符之间是存在换行的,如果想把这些换行符去掉,可以采用replace()函数将换行符替换掉,代码如下:10.2.3 pdfplumber库提取表格内容这里再补充一个知识点,在有的编译器中,比如PyCharm中,展示DataFrame的时候可能只展示一部分列而不展示全部列,这里可以在打印查看df前多写如下一行代码解决该问题:完整代码如下所示:10.3.1 遍历文件夹里所有的PDF文件首先我们需要遍历文件夹里所有的PDF文件然后才能进行批量的文本解析,在Python中通过如下几行代码即可实现文件夹遍历:10.3.1 遍历文件夹里所有的PDF文件各行代码解释如下:第一行引用os库,为之后使用os.walk功能遍历文件夹做准备;第二行就是写入你想要遍历的文件夹路径;第三行是遍历该母文件夹下面的所有子文件夹及子文件夹里的所有文件信息。

如果没有子文件夹,那么就只循环一遍,获取到该母文件夹下面的所有文件信息。

10.3.1 遍历文件夹里所有的PDF文件第四行是把文件信息打印输出出来。

其中files[2]表示母文件夹和子文件夹里的各个文件信息,我们一般写files[2]来获取文件信息。

如果写files[1]则表示各个子文件夹信息,如果写files[0]则表示母文件夹信息,运行结果如下:10.3.1 遍历文件夹里所有的PDF文件获取到文件名称后,我们还需要判断文件后缀名是否为.PDF,通过如下代码可以获得文件后缀名:有时文件后缀名为.pdf或.PDF,此时可以通过or逻辑运算符连接两个判断条件,代码如下:10.3.1 遍历文件夹里所有的PDF文件获取到文件名称后,我们还需要判断文件后缀名是否为.PDF,通过如下代码可以获得文件后缀名:有时文件后缀名为.pdf或.PDF,此时可以通过or逻辑运算符连接两个判断条件,代码如下:10.3.1 遍历文件夹里所有的PDF文件把这些PDF筛选出来之后,我们需要把它们都放到一个列表里,方便之后批量解析的时候调用,这里可以通过一个空列表和列表.append(新元素)的方法来完成该操作:上面获得的file_list中的元素都是文件名称,在真正实战的时候我们需要给文件名称加上文件夹路径,这样之后才可以调用。

比如说我们需要把“信托购买报告A.PDF”改成“文件夹路径\\信托购买报告A.PDF”,我们通过字符串拼接的方式来加上文件夹路径:10.3.1 遍历文件夹里所有的PDF文件组合代码如下:打印结果:10.3.2 批量解析每一个PDF文件10.3.2 批量解析每一个PDF文件完成上一小节的文件遍历之后,下面的批量解析其实只要写一个for循环即可:10.3.3 将合格的PDF文件自动归档遍历并解析完PDF后,便能够进行一些深度分析了,这边以关键词筛选为例作为演示:只有当PDF正文里含有‘自有'、'议案'、'理财'或者'现金管理'这些关键词的时候,我们才把这个PDF筛选出来并存储到一个列表里,代码如下:10.3.3 将合格的PDF文件自动归档完整代码如下(仅显示变化的部分):10.3.3 将合格的PDF文件自动归档这个是一个简单的分析策略,大家可以根据自己的逻辑来写自己的分析策略,比如可以通过自然语言处理以及机器学习来进行更深度的分析,这边不再详述。

如果想把这些筛选后的PDF文件存储到特定的文件夹,只需要补写如下代码:10.3.3 将合格的PDF文件自动归档其中第一行代码遍历刚刚筛选出来的PDF列表;第二行代码的话就是编写想要移动到的文件夹,这边有几个重要的注意点:注意点1:在写保存的文件夹的时候,这个文件夹一定要已经创建好了;注意点2:写保存的文件夹时候,不要在最后忘了多加两个反斜杠,比如'E:\\筛选后的文件夹\\'最后的两个反斜杠;注意点3:pdf_i.split(‘\\’)[-1]是为了获取到文件名称,我们以前将文件路径添加到pdf上了,通过split函数即可将它们分割开来,split分割之后产生一个列表,其中[-1]就表示列表中倒数第一个元素,也即文件名称。

相关主题