版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章数据预处理:解析财经报告6.1批量下载PDF至指定位置目录6.2解析单个PDF文件信息6.3批量提取PDF信息6.3.1批量输出PDF文本信息6.3.2筛选并转移PDF文件6.2.1解析PDF文本内容6.2.2解析PDF表格内容6.1批量下载PDF至指定位置右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.1批量下载PDF至指定位置通过Selenium库可以爬取下载PDF格式的文件,以巨潮资讯网为例。打开巨潮资讯网,搜索关键字“金融”,可以发现大多数搜索结果都附带有PDF格式的文件。由于在给搜索结果翻页时网址没有发生变化,所以我们使用Selenium库来爬取多页搜索结果的网页源代码。右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.1批量下载PDF至指定位置首先,使用Selenium库来获取巨潮资讯网中以“金融”为关键词的搜索结果的网页源代码:fromseleniumimportwebdriverimportreimporttimechrome_options=webdriver.ChromeOptions()chrome_options.add_argument('--headless')browser=webdriver.Chrome(options=chrome_options)url='/new/fulltextSearch?notautosubmit=&keyWord=金融'browser.get(url)time.sleep(2)data=browser.page_source#Selenium库获得网页源代码#print(data)#尝试输出网页源代码,检查代码是否运行成功右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.1批量下载PDF至指定位置用XPath或css_selector方法查找“下一页”的网页元素并模拟鼠标单击由于网页源代码储存在列表中,而只有字符串才能使用正则表达式,所以最后要将列表元素转化为字符串。代码如下:datas=[]#建立一个空列表来储存网页源代码datas.append(data)#添加第一页网页源代码至列表中foriinrange(2):#设置爬取页数
browser.find_element_by_xpath('//*[@id="fulltext-search"]/div[2]/div/div/div[2]/div[4]/div[2]/div/button[2]').click()#点击“下一页”
time.sleep(1)
data=browser.page_source
datas.append(data)alldata=''.join(datas)#将网页源代码转化为字符串browser.quit()右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.1批量下载PDF至指定位置如果想爬取所有公告中的PDF文件,我们需要知道总页数。我们可以发现每页有十条公告,底部还有公告总数,由此得到总页数的计算公式。代码如下:p_count='<spanclass="total-box"style="">约(.*?)条'count=re.findall(p_count,data)[0]pages=int(int(count)/10)
#将列表元素转化为数字进行运算并将运算结果化为整数注意:由于findall()函数获取的是一个列表,为了应用于计算,我们需要在findall()函数结尾加[0]来提取列表元素右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.1批量下载PDF至指定位置获得网页源代码后,我们可以用正则表达式来提取公告的标题和网址。提取标题是为了方便我们了解下载了哪些公告,提取网址则是为了之后进入公告下载PDF文件。如果有需要的话也可以爬取日期等数据并打印输出。代码如下:p_title='<spantitle=""class="r-title">(.*?)</span>'title=re.findall(p_title,alldata)p_href='<atarget="_blank"href="(.*?)"data-id='href=re.findall(p_href,alldata)右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.1批量下载PDF至指定位置正则表达式获得的标题含有无效信息,网址则缺失了一半,所以需要对数据进行加工和处理:foriinrange(len(title)):
title[i]=title[i].strip()
title[i]=re.sub('<.*?>','',title[i])
href[i]=''+href[i]
href[i]=re.sub('amp;','',href[i])右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.1批量下载PDF至指定位置最后是下载PDF文件至指定的位置。首先用for循环对网址遍历。然后指定下载位置,第四行中‘d:\\公告’可以替换成任意文件夹路径,如果指定的位置没有文件夹则会自动创建一个新的文件夹。foriinrange(len(href)):
chrome_options=webdriver.ChromeOptions()
prefs={'profile.default_content_settings.popups':0,
'download.default_directory':'d:\\公告'}#下载文件至指定位置
chrome_options.add_experimental_option('prefs',prefs)
chrome_options.add_argument('--headless')
browser=webdriver.Chrome(chrome_options=chrome_options)
browser.get(href[i])右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.1批量下载PDF至指定位置由于有些公告未附带PDF文件,所以需要使用try/except语句防止程序报错。try语句中模拟鼠标单击下载按钮,由于下载需要时间,所以最好设置间隔时间,根据文件大小自行调整间隔时间长短
try:
browser.find_element_by_xpath('
//*[@id="noticeDetail"]/div/div[1]/div[3]/div[1]/button').click()#点击“下载”按钮
time.sleep(1)
print(str(i+1)+'.'+title[i]+'下载完毕')
except:
print(title[i]+'不是PDF文件')6.2.1解析PDF文本内容右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.2.1解析PDF文本内容我们可以使用pdfplumber库解析PDF文本和表格,它的extrac_text()函数可以解析PDF文件的文本内容。首先,我们需要打开目标PDF文件,这里有两种方法:1.pdf=pdfplumber.open(‘D:\\公告\\金融报告.PDF’)2.pdf=pdfplumber.open('金融报告.PDF’)第一种方法是写明绝对路径;第二种方法是直接打开放在代码文件夹中的PDF文件。右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.2.1解析PDF文本内容打开PDF文件后,使用pages属性获取文件中所有页的信息。接着用for循环遍历所有页并用extrac_text()函数获得每一页中的文本信息。为了防止文本为空而报错,可以添加一个if语句,使文本为空时程序继续运行。最后将每一页获得的文本信息输入创建的空列表中,并将列表元素转化为字符串的形式。pages=pdf.pagestext_all=[]forpageinpages:
text=page.extract_text()#获得每一页的文本信息
iftext==None:
continue
text_all.append(text)text_all=''.join(text_all)#将提取的文本信息转化为字符串print(text_all)pdf.close()右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.2.1解析PDF文本内容如果想提取指定页的文本内容,可以使用如下代码,直接获取列表pages中的元素,然后提取文本信息并打印输出:importpdfplumberpdf=pdfplumber.open('D:\\公告\\金融报告.PDF')pages=pdf.pagespage=pages[0]text=page.extract_text()print(text)6.2.2解析PDF表格内容右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.2.2解析PDF表格内容pdfplumber库也可以用extract_tables()函数来提取文件中的表格,并配上pandas库使最终呈现的结果更加美观,具体代码如下:importpdfplumberpdf=pdfplumber.open(‘D:\\公告\\金融报告.PDF')pages=pdf.pagespage=pages[1]#page设置为表格所在页tables=page.extract_tables()#提取表格所在页中的所有表格table=tables[0]#提取所有表格中的目标表格print(table)右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.2.2解析PDF表格内容仅使用pdfplumber库所获得的表格如上图所示,呈现出大列表套小列表的层层嵌套的形式,不够清晰美观,所以我们可以用pandas库来改变结果的展现形式,代码如下:importpandasaspdpd.set_option('display.max_columns',None)#显示所有的列df=pd.DataFrame(table[1:],columns=table[0])#将表格按行列排列整齐,最好放在所有代码的结尾注意:因为有些代码编辑器(如PyCharm)可能不会将表格的所有列都显现出来,所以需要专门编写代码展示所有列。最终结果如右图:右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.2.2解析PDF表格内容当发现表格中存在换行符时,我们可以使用如下代码消除换行符:foriinrange(len(table)):forjinrange(len(table[i])):table[i][j]=table[i][j].replace('\n',‘’)
#将换行符变成空值注意:由于提取出的列表是嵌套的形式,所以需要先定位到大列表中的小列表,然后才能定位到小列表中的元素。6.3.1批量输出PDF文本信息右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.3.1批量输出PDF文本信息输出多个PDF文件文本信息输出多个PDF文件文本信息的关键是需要先遍历这些文件。遍历完这些文件后,只需要使用for循环和输出单个PDF文件文本信息的方法就可以输出多个PDF文件文本信息了。右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.3.1批量输出PDF文本信息遍历多个PDF文件的代码如下:importosfile_dir=‘D:\\公告’#确定PDF文件所在文件夹的路径file_list=[]#建立一个空列表储存PDF文件的信息forfilesinos.walk(file_dir):
forfileinfiles[2]:#获取文件夹中所有文件的信息ifos.path.splitext(file)[1]=='.pdf'oros.path.splitext(file)[1]=='.PDF’:
#筛选PDF文件file_list.append(file_dir+'\\'+file)#形成所有PDF文件的路径print(file_list)结果如图:6.3.2筛选并转移PDF文件右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.3.2筛选并转移PDF文件用关键词筛选PDF文件的方法是建立一个储存筛选后PDF文件的空列表,在获取文本信息后用if语句筛选,将含有关键词的文件添加到空列表中。需要注意的是,空列表不能建立在for循环中,否则在每次循环时列表都会被清空。右键点击图片选择设置图片格式可直接替换图片。您的容打在这里,或者通这里,或者通过复制过复制您的文本6.3.2筛选并转移PDF文件相关代码如下:#1.获得所有PDF文件的文本信息pdf_all=[]
#建立储存筛选后PDF文件的空列表foriinrange(len(file_list)):pdf=pdfplumber.open(file_list
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自动识别技术方案
- 2025-2026学年揭阳市揭西县数学三上期中考试试题(含解析)
- 2026年阜阳幼儿师范高等专科学校单招综合素质考试模拟测试卷附答案
- 消化系统疾病的饮食疗法与护理
- 2026年新媒体运营技能培训调研
- AI音乐创作工具商业化变现模式调研
- 2026年金融风险管理考试题含市场波动分析与风险评估
- 2026年音乐教师资格认证笔试预测模拟题
- 2026年制造业成本控制与常见成本控制问题详解题集
- 2026年企业财务决策与风险管理实战问题集
- 2025年山东省济南市历下区中考一模英语试题(原卷版+解析版)
- DBJ50T-100-2022 建筑边坡工程施工质量验收标准
- 制造部年终总结
- DB51-T 192-2024 公园城市绿色景观围墙营建指南
- 《食品标准与法规》课件全套 第1-6章 绪论-食品生产经营许可和认证管理
- JBT 7562-2016 YEZX系列起重用锥形转子制动三相异步电动机 技术条件
- 建筑工地安全形势分析
- 【拼多多公司盈利能力探析11000字(论文)】
- 区域地质调查及填图方法
- 新生儿疫苗接种的注意事项与应对措施
- 脓毒症休克患者的麻醉管理
评论
0/150
提交评论