【新三板年报文本分析】第一辑:python+selium模拟浏览器,批量实现上市公司年报链接

目录

  • 序言
  • 函数模块介绍
    • 创建模拟浏览器对象
    • 只需要执行一次的部分
    • 需要批量执行的重复操作部分(信息录入excel)
    • 换页操作
    • 主函数
  • 本地文件结构
  • 全部代码
  • 结果预览

如果直接需要结果的,可以直接见文末,获取资源。

序言

新三板年报链接:https://www.neeq.com.cn/disclosure/announcement.html

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

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

一定不要图快,目前我是2s左右完成一次。建议在网络环境较好的情况下运行

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

函数模块介绍

创建模拟浏览器对象

# 返回虚拟浏览器对象
def openUrl(url):driver = webdriver.Chrome()driver.get(url)time.sleep(2)return driver

只需要执行一次的部分

xpath如何获取百度一下即可

# 只运行一次,避免重复操作影响效率
def onceClick(driver):driver.find_element_by_xpath('//*[@id="root"]/div[4]/div/div/div[1]/div[1]/div/div[4]/div/div[2]/span[5]').click()    time.sleep(2)

需要批量执行的重复操作部分(信息录入excel)

# 每一页的XPATH都是一样的,只需处理好一页即可
def judge(driver,df): global firmNofor i in range(1,21):element=driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[3]/a')text=element.textif '年度报告' in text and '年度报告摘要' not in text:firmNo=firmNo+1# 根据图片名称判断是创新层还是基础层try:stageelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[1]/img')srcname=stageelement.get_attribute('src')          if 'jj' in srcname:df['stage'][firmNo]='基础层'elif 'cy' in srcname:df['stage'][firmNo]='创新层'except:print('跳过层次认定')continue# 公司代码codeelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[1]/a')code=codeelement.textdf['code'][firmNo]=code# 公司简称firmelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[2]')firm=firmelement.textdf['firm'][firmNo]=firm# 报告年份index=text.index(':')year=text[index+1:index+5]df['year'][firmNo]=year# 年报链接urlelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[4]/a')url=urlelement.get_attribute('href')  df['url'][firmNo]=url# 发布日期dateelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[5]')date=dateelement.textdf['date'][firmNo]=date              df.to_csv('url.csv')

换页操作

由于年报链接在不同的页,需要模拟浏览器点击进行换页操作

# 换页
def turn_to_page(driver,page):   if page==2:driver.find_element_by_xpath('//*[@id="root"]/div[4]/div/div/div[1]/div[3]/div/a[1]').click()elif page>=3 and page<=5:driver.find_element_by_xpath(f'//*[@id="root"]/div[4]/div/div/div[1]/div[3]/div/a[{page}]').click()if page>6:driver.find_element_by_xpath('//*[@id="root"]/div[4]/div/div/div[1]/div[3]/div/a[6]').click()print(f'已跳转至{page}页')

主函数

#主函数
if __name__ =='__main__':driver=openUrl('https://www.neeq.com.cn/disclosure/announcement.html')onceClick(driver)df=pd.DataFrame(columns=['stage','code','firm','year','url','date'],index=range(1,20000))for i in range(2,4000):judge(driver,df)turn_to_page(driver,i)time.sleep(2.5)driver.close()

本地文件结构

只需要将excel文件和代码文件放一起即可,或者用绝对路径也可
在这里插入图片描述

全部代码

from selenium import webdriver 
import time 
import pandas as pdfirmNo=0# 返回虚拟浏览器对象
def openUrl(url):driver = webdriver.Chrome()driver.get(url)time.sleep(2)return driver# 只运行一次,避免重复操作影响效率
def onceClick(driver):driver.find_element_by_xpath('//*[@id="root"]/div[4]/div/div/div[1]/div[1]/div/div[4]/div/div[2]/span[5]').click()    time.sleep(2)# 每一页的XPATH都是一样的,只需处理好一页即可
def judge(driver,df): global firmNofor i in range(1,21):element=driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[3]/a')text=element.textif '年度报告' in text and '年度报告摘要' not in text:firmNo=firmNo+1# 根据图片名称判断是创新层还是基础层try:stageelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[1]/img')srcname=stageelement.get_attribute('src')          if 'jj' in srcname:df['stage'][firmNo]='基础层'elif 'cy' in srcname:df['stage'][firmNo]='创新层'except:print('跳过层次认定')continue# 公司代码codeelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[1]/a')code=codeelement.textdf['code'][firmNo]=code# 公司简称firmelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[2]')firm=firmelement.textdf['firm'][firmNo]=firm# 报告年份index=text.index(':')year=text[index+1:index+5]df['year'][firmNo]=year# 年报链接urlelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[4]/a')url=urlelement.get_attribute('href')  df['url'][firmNo]=url# 发布日期dateelement = driver.find_element_by_xpath(f'//*[@id="table"]/table/tbody/tr[{i}]/td[5]')date=dateelement.textdf['date'][firmNo]=date              df.to_csv('url.csv')# 换页
def turn_to_page(driver,page):   if page==2:driver.find_element_by_xpath('//*[@id="root"]/div[4]/div/div/div[1]/div[3]/div/a[1]').click()elif page>=3 and page<=5:driver.find_element_by_xpath(f'//*[@id="root"]/div[4]/div/div/div[1]/div[3]/div/a[{page}]').click()if page>6:driver.find_element_by_xpath('//*[@id="root"]/div[4]/div/div/div[1]/div[3]/div/a[6]').click()print(f'已跳转至{page}页')#主函数
if __name__ =='__main__':driver=openUrl('https://www.neeq.com.cn/disclosure/announcement.html')onceClick(driver)df=pd.DataFrame(columns=['stage','code','firm','year','url','date'],index=range(1,20000))for i in range(2,4000):judge(driver,df)turn_to_page(driver,i)time.sleep(2.5)driver.close()

结果预览

在这里插入图片描述
我获取的是2018-2022五年的所有年报的链接,文件放在下方链接,有需求自取,就无需在运行上述代码了。

https://download.csdn.net/download/weixin_43956523/88870592

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

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

相关文章

emoji选择器

emoji表情 功能描述 这款聊天对话时选择表情的UI插件&#xff0c;是为了提升用户在聊天过程中的互动体验而设计的。它提供了一个直观且易于操作的界面&#xff0c;使用户能够快速地选择并插入各种表情符号&#xff0c;从而丰富他们的聊天内容&#xff0c;增加情感表达的多样性…

Unity3D 使用 Proto

一. 下载与安装 这里下载Google Protobuff下载 1. 源码用来编译CSharp 相关配置 2. win64 用于编译 proto 文件 二. 编译 1. 使用VS 打开 2. 点击最上面菜单栏 工具>NuGet 包管理器>管理解决方案的NuGet 管理包 版本一定要选择咱们一开始下载的对应版本否则不兼容&am…

C语言第三十一弹---自定义类型:结构体(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、结构体内存对齐 1.1、为什么存在内存对齐? 1.2、修改默认对齐数 2、结构体传参 3、结构体实现位段 3.1、什么是位段 3.2、位段的内存分配 3.3、…

幻兽帕鲁服务器多少钱?有买过的吗?

幻兽帕鲁服务器多少钱&#xff1f;太卷了&#xff0c;降价到24元1个月&#xff0c;阿里云4核16G10M游戏服务器26元1个月、149元半年&#xff0c;腾讯云4核16G游戏服务器32元、312元一年&#xff0c;华为云26元&#xff0c;京东云主机也是26元起。云服务器吧yunfuwuqiba.com给大…

VUE3环境搭建开发准备

VUE3 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vu…

【Prometheus】概念和工作原理介绍

目录 一、概述 1.1 prometheus简介 1.2 prometheus特点 1.3 prometheus架构图 1.4 prometheus组件介绍 1、Prometheus Server 2、Client Library 3、pushgateway 4、Exporters 5、Service Discovery 6、Alertmanager 7、grafana 1.5 Prometheus 数据流向 1.6 Pro…

100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站

文章目录 专栏导读1. 前言2. 实现步骤3. 基础补充4. 代码实战4.1 创建连接4.2 添加请求头伪装浏览器4.3 隐藏浏览器指纹4.4 最大化窗口4.5 启动网页4.6 点击密码登录4.7 输入账号密码4.8 点击登录按钮4.9 完整代码4.10 GIF动图展示 五、总结 专栏导读 &#x1f525;&#x1f5…

IDEA安装配置以及安装配置Maven

IEDA官方下载地址&#xff0c;有专业版&#xff08;收费&#xff0c;破解&#xff09;&#xff0c;社区版&#xff08;免费&#xff09; 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 安装配置Maven 1.解压apache-maven-3.6.3-bin.zip&#xff0c;安装maven到D盘softwar…

台湾旺泓-WH4530A三合一光距感 接近传感芯片

WH4530A是一款集成了环境光传感器&#xff08;PS&#xff09;接近传感器&#xff08;ALS&#xff09;和红外LED灯三合一为一体的光距感传感芯片&#xff0c;可以测距从0到100厘米以内范围&#xff1b;并采用I2C接口具有超高的灵敏度和精准的测距检测范围。 该WH4530A​​​​​…

真香!NineData SQL开发全面适配 GaiaDB

2 月&#xff0c;新年伊始&#xff0c;NineData 重磅发布&#xff0c;提供了对百度云原生关系型数据库 GaiaDB 的支持。 这一次的发布不仅仅是简单的数据源支持&#xff0c;而是覆盖了整个 SQL 开发能力的重要发布&#xff0c;意味着您已经可以完整地使用 NineData SQL 开发的…

MySQL 事务原理分析

事务 前提&#xff1a;并发连接访问。定义&#xff1a;事务是用户定义的一系列操作&#xff0c;这些操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的单位。目的&#xff1a;事务将数据库从一种一致性状态转换为另一种一致性状态&#xff0c;保证系统始终处于…

半导体物理基础-笔记(续)

源内容参考&#xff1a;https://www.bilibili.com/video/BV11U4y1k7zn/?spm_id_from333.337.search-card.all.click&vd_source61654d4a6e8d7941436149dd99026962 掺杂半导体的费米能级与温度及杂质浓度的关系图 在温度一定的条件下&#xff0c;施主杂质浓度越高&#xff0…

Oracle EBS GL 外币折算逻辑

背景 由于公司财务在10月份期间某汇率维护错误,导致帐套折算以后并合传送至合并帐套生成合并日记帐凭证的借贷金额特别大,但是财务核对的科目余额有没有问题,始终觉得合并日记帐生成会计分发有问题,需要我们给出外币折算逻辑。 基础设置 汇率 Path: GL->设置->币种-&…

pclpy 最小二乘法拟合平面

pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为&#xff1a; A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即&#xff1a; …

Spring Boot对接RocketMQ示例

部署服务 参考RocketMq入门介绍 示例 引入maven依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version></dependency>完整依赖如下&am…

C++ 游戏飞机大战, 字符型的

//#define _CRT_SECURE_NO_WARNINGS 1 用于禁止不安全函数的警告 #include<iostream> #include<stdlib.h> #include<string> #include<conio.h> #include<Windows.h> #include<time.h> #include <graphics.h> using namespace std;…

Rust升级慢,使用国内镜像进行加速

背景 rustup 是 Rust 官方的跨平台 Rust 安装工具&#xff0c;国内用户使用rustup update的时候&#xff0c;网速非常慢&#xff0c;可以使用国内的阿里云镜像源来进行加速 0x01 配置方法 1. Linux与Mac OS用户配置环境变量 修改~/.bash_profile文件添加如下内容&#xff1…

微信小程序 --- 小程序基础知识

小程序基础知识 1. 认识什么是小程序 什么是微信小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 在使用小程序时 不需要下载安装&#xff0c;用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念&#xff0c;用户不用关心安装太多应用的问题…

力扣链表篇

以下刷题思路来自代码随想录以及官方题解 文章目录 203.移除链表元素707.设计链表206.反转链表24.两两交换链表中的节点19.删除链表的倒数第N个节点面试题 02.07. 链表相交142.环形链表II 203.移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链…

AutoGen Studio助力打造私人GPTs

微软最近在开源项目里的确挺能整活儿啊! 这次我介绍的是AutoGen Studio,我认为这个项目把AutoGen可用性又拔高了一个层次的项目 项目给自己的定义是交互式的多Agent workflow 项目地址:autogen/samples/apps/autogen-studio at main microsoft/autogen (github.com) 首先我…