【年报文本分析】Python+Selium获取互动易平台投资者提问与上市公司回应文本数据

目录

  • 序言
  • excel文件准备
  • 全部代码

序言

互动易平台链接:https://irm.cninfo.com.cn/views/interactiveAnswer

需要提前下载好三个库,都可以用pip install轻松下载,稍微麻烦点儿的是需要去下载个对应版本的chromedriver.exe驱动,放到python或者Anaconda的文件夹目录下,然后添加环境变量(这部分报错了自行百度即可,操作起来不麻烦的)

注意time.sleep()是必要的,一是为了避免频繁操作被浏览器提醒,二是在网络不好的情况下让网页加载完全,否则都会导致报错,一定不要图快,建议在网络环境较好的情况下运行

这之中还会遇到诸多问题,在代码的注释里也都写到了,其他需求可以做参考。

excel文件准备

文件名建议直接命名为info.xlsx,读取时使用该路径,文件需要至少包括code(股票代码)和year(年份)

在这里插入图片描述

全部代码

详细解释已写在注释中

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys
import time 
import pandas as pd
import requests
from urllib.request import urlopen
from bs4 import BeautifulSoupindex1=1 # 数据所在行
index2=1 # 数据所在行
dtype={'code':str,'year':str}
dfInfo=pd.read_excel('info.xlsx',sheet_name='Sheet1',dtype=dtype)#导入基础信息表
#创建已回复空表
df1=pd.DataFrame(columns=['code','name','year','url','Answer','Atime','Question','Qtime'],index=range(1,30001))
#创建未回复空表
df2=pd.DataFrame(columns=['code','name','year','Question','Qtime'],index=range(1,5001))# 创建浏览器对象,并全屏,进入互动易平台
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://irm.cninfo.com.cn/views/interactiveAnswer')
time.sleep(4)# 根据行序号,对sourcedf进行遍历
# 如果信息较多,建议可以分批运行,支持中断
startRow=1
endRow=100
for i in range(startRow,endRow+1):#在新表中保存信息code=dfInfo['code'][i]name=dfInfo['name'][i]year=dfInfo['year'][i]print(str(i)+' '+code+' '+name+' '+year)###一系列的点击输入操作driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[1]').click()time.sleep(0.5)#根据是否首次输入,调整输入内容if i==startRow:driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[3]/div/div/input[1]').send_keys('20'+year[2:]+'-01-01')time.sleep(0.5)driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[3]/div/div/input[2]').send_keys('20'+year[2:]+'-12-31')time.sleep(0.5)driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[2]/div/input').click()time.sleep(0.5)driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[1]/input').send_keys(code)time.sleep(1)else:driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[3]/div/div/input[1]').send_keys(8*Keys.BACKSPACE)time.sleep(0.5)  driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[3]/div/div/input[1]').send_keys(year[2:]+'-01-01')time.sleep(0.5)driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[3]/div/div/input[2]').send_keys(8*Keys.BACKSPACE)time.sleep(0.5)driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[3]/div/div/input[2]').send_keys(year[2:]+'-12-31')time.sleep(0.5)driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[2]/div/input').click()time.sleep(0.5)driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[1]/input').send_keys(6*Keys.BACKSPACE)time.sleep(0.5)driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[1]/div/div[1]/input').send_keys(code)time.sleep(1)#点击确定driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[3]/div[2]/div[4]/button[1]').click()time.sleep(1)#点击进入已回复界面driver.find_element_by_xpath('//*[@id="tab-11"]').click()time.sleep(1)   #收集已回复的信息for j in range(200):for k in range(1,11):#如果当页有十条数据,就获取并写入信息,如果不足十条就跳出当前循环try: Question=driver.find_element_by_xpath(f'//*[@id="pane-11"]/div[{k}]/span/span/a/div[1]/span').textAnswer=driver.find_element_by_xpath(f'//*[@id="pane-11"]/div[{k}]/span/span/a/div[2]/span[1]/span').textAtime=driver.find_element_by_xpath(f'//*[@id="pane-11"]/div[{k}]/a/span/span[2]/span[2]').textelement=driver.find_element_by_xpath(f'//*[@id="pane-11"]/div[{k}]/span/span/a')               url=element.get_attribute('href')df1['code'][index1]=codedf1['name'][index1]=namedf1['year'][index1]=yeardf1['url'][index1]=url          df1['Question'][index1]=Questiondf1['Answer'][index1]=Answerdf1['Qtime'][index1]=Atimeindex1+=1except:break    #如果有下一页按钮就点击,否则跳出当前循环try:driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[2]/div/button[2]').click()time.sleep(1)except:break#点击进入未回复界面driver.find_element_by_xpath('//*[@id="tab-1"]').click()time.sleep(1)     #收集未回复的信息for a in range(200):for b in range(1,11):#如果当页有十条数据,就获取并写入信息,如果不足十条就跳出当前循环try: Question=driver.find_element_by_xpath(f'//*[@id="pane-1"]/div[{b}]/span/span/a/div/span').textQtime=driver.find_element_by_xpath(f'//*[@id="pane-1"]/div[{b}]/a/span/span[2]/span[2]').textdf2['code'][index2]=codedf2['name'][index2]=namedf2['year'][index2]=year       df2['Question'][index2]=Questiondf2['Qtime'][index2]=Qtimeindex2+=1except:break    #如果有下一页按钮就点击,否则跳出当前循环try:driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div[2]/div[1]/div[2]/div/button[2]').click()time.sleep(1)except:break# 每隔100个保存一次,防止中途断网或报错导致前边运行完成的数据丢失if i%100 == 0:df1.to_excel('result1.xlsx')df2.to_excel('result2.xlsx')
# 保存最终版,如果不是一次性运行完,可以将结果复制到新表中后关闭,随后调整startrow和endrow进行下一阶段的运行
df1.to_excel('result1.xlsx')
df2.to_excel('result2.xlsx') 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路由表与IP数据报的转发

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、相关知识 1、路由类型 路由表中有3类路由:直连路由、静态路由、动态路由 直连路由:一般指去往路由器接口直接连接网络的…

mysql中You can’t specify target table for update in FROM clause错误

mysql中You can’t specify target table for update in FROM clause错误 You cannot update a table and select directly from the same table in a subquery. mysql官网中有这句话,我们不能在一个语句中先在子查询中从某张表查出一些值,再update这张表…

【ffmpeg命令入门】视频剪切,倍速与倒放

文章目录 前言1. 视频剪切2. 视频倍速公式说明例子 3. 视频倒放总结 前言 在视频编辑中,剪切、倍速和倒放是常见的操作,能够帮助我们调整视频的长度、播放速度以及播放顺序。掌握 FFmpeg 命令中的相关参数和用法将使视频处理变得更加高效。在这篇文章中…

pytest使用

主要技术内容 1.pytest设计 接口测试 框架设想 common—公共的东西封装 1.request请求 2.Session 3.断言 4.Log 5.全局变量 6.shell命令 ❖ config---配置文件及读取 ❖ Log— ❖ payload—请求参数—*.yaml及读取 ❖ testcases—conftest.py; testcase1.py…….可…

2024年【熔化焊接与热切割】考试题及熔化焊接与热切割考试总结

题库来源:安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试题是安全生产模拟考试一点通生成的,熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材汇编出熔化焊接与热切割仿真模拟考试。2024年【熔化焊接与热切割】考试题及熔化…

vue-plugin-hiprint 打印 预览打印+静默打印

1.安装 npm install vue-plugin-hiprint npm i socket.io-client --save //为了静默打印 &#xff08;为此还需安装客户端&#xff09; 2…html页面 引入css <link rel"stylesheet" type"text/css" media"print" href"https://cdn.jsde…

创新大赛中财务预测的策略与技巧

创新大赛中财务预测的策略与技巧 前言财务预测的重要性财务预测的步骤财务预测的关键要素注意事项结语 前言 在当今快节奏、竞争激烈的商业环境中&#xff0c;创新不仅是推动企业成长的动力&#xff0c;更是衡量一个项目能否在市场中脱颖而出的关键。创新大赛作为展示这些创新成…

星耀巴黎,竞猜有礼!为运动健儿加油,让世界看见中国力量

即将高燃来袭首金荣耀&#xff0c;让我们拭目以待&#xff01; 当象征着“更快、更高、更强”的号角再次吹响&#xff0c;谁又能在这场全球瞩目的体育盛宴中&#xff0c;率先触碰那份至高无上的荣耀&#xff1f;“首金”不仅是一个国家或地区体育实力的象征&#xff0c;更是运…

1台solidworks图形工作站同时给5人一起使用

在日益发展的科技环境中&#xff0c;团队协作已成为各个行业不可或缺的一一部分。对于工程设计和图形处理领域而言&#xff0c;SolidWorks等强 大的三维建模和仿真软件成为了日常工作的重要工具。 随着团队规模的扩大和项目复杂性的增加&#xff0c;如何高效、稳定地为多人提供…

Java入门:05.Java中的数组002

通过上篇文章&#xff0c;相信大家对数组应该有了一个简单的了解&#xff0c;并对Java中的数据类型有了一个基本的认识&#xff0c;不仅如此我们还明白了怎样定义一个数组类型的变量&#xff0c;在这之后&#xff0c;让我们一起来更加深入的了解一下数组吧。 三、如何创建一个…

Axure软件新功能解析与应用技巧分享

Axure是一种用于创建原型和交互设计的软件工具&#xff0c;广泛应用于操作界面。&#xff08;UI&#xff09;和客户体验&#xff08;UX&#xff09;为了展示和测试应用程序、网站或其他数据产品的性能和操作界面&#xff0c;设计帮助产品经理、设计师和开发者制作具有交互性的原…

Ghost Buster Pro for Mac:系统优化的得力助手

Ghost Buster Pro for Mac是一款功能强大的系统优化工具&#xff0c;专为Mac用户设计&#xff0c;旨在提供全方位的系统清理、优化和维护服务。 这款软件拥有出色的垃圾清理能力&#xff0c;能够深度扫描并清除Mac上的无效目录、文件、系统日志、下载历史记录、缓存和临时文件…

每日任务:TCP/IP模型和OSI模型的区别

介绍一下TCP/IP模型和OSI模型的区别&#xff1f; OSI模型由国标准化组织提出&#xff0c;而TCP/IP模型是由美国国防部开发的&#xff1b; OSI模型由七个层次组成&#xff0c;从下到上依次为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP模型只有四层…

Text Control 控件教程:使用 .NET C# 中的二维码和条形码增强文档

QR 码和条形码非常适合为文档和 PDF 文件增加价值&#xff0c;因为它们提供轻松的信息访问、验证信息、跟踪项目和提高交互性。条形码可以弥补纸质或数字人类可读文档与网络门户或网络应用程序中的数字信息之间的差距。大多数用户都熟悉 QR 码和条形码&#xff0c;它们在许多过…

宠物空气净化器是不是智商税?靠谱的浮毛空气净化器推荐

宠物空气净化器是不是智商税&#xff1f;宠物空气净化器是否真有其效&#xff0c;是许多由于要不要买空气净化器养宠人心中的疑惑。作为呼吸科的医生&#xff0c;我深知优质的空气质量对预防呼吸系统疾病的重要性。因此&#xff0c;我建议所有有条件的家庭&#xff0c;尤其是家…

IO多路复用——select

仅一个线程、进程处理并发 IO多路转接&#xff08;复用&#xff09;之select 跨平台适用linux&#xff0c;windows 底层&#xff1a;线性表 IO多路转接&#xff08;复用&#xff09;之poll 适用linux 底层&#xff1a;线性表 IO多路转接&#xff08;复用&#xff09;之epo…

Ecovadis评估方案

在当今全球供应链日益复杂且环保意识日益增强的背景下&#xff0c;EcoVadis评估方案作为一种领先的可持续发展评估工具&#xff0c;正逐步成为企业衡量其社会责任与环境绩效的重要标尺。EcoVadis通过一套全面而细致的评价体系&#xff0c;帮助企业识别其在可持续发展方面的优势…

pdf自动生成书签

PDF 自动生成书签&#xff0c;使用软件【PDF补丁丁】 软件官网&#xff1a; https://www.cnblogs.com/pdfpatcher/Github&#xff1a;https://github.com/wmjordan/PDFPatcher参考视频内容&#xff1a;使用PDFPatcher自动生成PDF书签 直接从软件官网下载压缩包&#xff0c;运…

【日常记录】【JS】JS中查询参数处理工具URLSearchParams

文章目录 1. 引言2. URLSearchParams2.1 URLSearchParams 的构造函数2.2 append() 方法2.3 delete() 方法2.4 entries() 方法2.5 forEach() 方法2.6 get() 方法2.7 getAll() 方法2.8 has() 方法2.9 keys() 方法2.10 set() 方法2.11 toString() 方法2.12 values() 方法 参考链接…

百度搜索X唐朝诡事录跨界联动影视智能体,集追剧探案于一体!

想必这几天大家都已经被 #唐朝诡事录好看#、#唐朝诡事录你真的火了# 刷屏了&#xff0c;时隔两年&#xff0c;霸榜热门大剧《唐朝诡事录之西行》终于火热回归啦&#xff01; 一文一武双男主设定只为专心攻破悬案&#xff0c;正反派全都智商在线&#xff0c;是一部不可多得的良…