【Python爬虫实战】1.爬取A股上市公司年报链接并存入Excel

这篇具有很好参考价值的文章主要介绍了【Python爬虫实战】1.爬取A股上市公司年报链接并存入Excel。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 1.项目分析

  •  数据来源:巨潮资讯
  •  项目需求:按照股票代码,公司名称,年报全称,年份,下载链接等要素写入excel表
  •  使用语言:python
  •  第三方库:requests, re , time等

成品展示: 

python爬虫 上市公司年报,Python爬虫项目,python,爬虫,开发语言,金融,数据分析


2. 快速上手

废话就到这里,直接开干!

1.寻找接口

众所周知,爬取网页数据一般可以通过寻找网页结构规律和爬取接口两种方式,简单起见,笔者直接使用了搜索接口。

下图为巨潮资讯网首页。

python爬虫 上市公司年报,Python爬虫项目,python,爬虫,开发语言,金融,数据分析

小手一点,年报直接出现,这是针对具体公司的年报可以直接搜索,那么该如何爬取所有的记录呢?

F12打开开发者工具,进行简单的网络抓包。

通过切换页面,发现网络上有响应,发现搜索接口。

python爬虫 上市公司年报,Python爬虫项目,python,爬虫,开发语言,金融,数据分析

没错,就是这段链接!

searchkey:搜索内容;pageNum:当前页码; type = shj:沪深京主板……

当然,也可以加入参数&sdate=2015-01-01&edate=2022-01-01&来指定搜索链接。

直接get,返回一个json文件,也包含股票代码,公司名称,还有关键的下载链接!

python爬虫 上市公司年报,Python爬虫项目,python,爬虫,开发语言,金融,数据分析


2.获取数据

既然找到了json文件,那么就很好入手,直接打开pycharm。

先根据接口,写好访问参数。

import requests
import re
import openpyxl
import time

# 设置搜索参数
search_key = "年报"
url_template = "http://www.cninfo.com.cn/new/fulltextSearch/full?searchkey={}&sdate=2016-01-01&edate=2017-01-01&isfulltext=false&sortName=pubdate&sortType=desc&pageNum={}&type=shj"
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.5',
        'Accept-Encoding': 'gzip, deflate, br',
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1'
    }

然后使用request进行访问,注意程序的稳健性!爬取众多文件很容易报错,所以要做好异常机制处理,笔者做了失败重试以及多次失败后直接跳过的机制。

# 发送HTTP请求并获取响应
all_results = []
page_num =1 #设置首页
total_pages = 1 #初始化最大页面
max_retries = 2 #最大重试次数
retry_count = 0

while page_num <= total_pages:
    url = url_template.format(search_key, page_num)
    response = None

    # 重试机制
    while retry_count <= max_retries:
        # 发送请求
        try:
            response = requests.get(url,headers=headers)
            response.raise_for_status()
            break
        except requests.exceptions.RequestException as e:
            print(f"出现错误!: {e}")
            print(f"5秒后重试...")
            time.sleep(5)
            retry_count += 1

    if retry_count > max_retries:
        print(f"{max_retries} 次重试后均失败. 跳过第 {page_num}页.")
        page_num += 1
        retry_count = 0
        continue

然后就是不断循环,将每次得到的json文件合并到all_result中

# 解析数据
    try:
        data = response.json()
        all_results.extend(data["announcements"])
        total_pages = data["totalpages"]
        print(f"正在下载第 {page_num}/{total_pages}页")
        page_num += 1
        retry_count = 0
    except (ValueError, KeyError) as e:
        print(f"Error parsing response data: {e}")
        print(f"5秒后重试...")
        time.sleep(5)
        retry_count += 1
        continue

 这一部是关键!json文件如果处理过程中报错,很容易前功尽弃!又需要重头开始。

经过笔者测试,该接口最大页数为2000,大于该数字必定报错,因此爬取时可以限定时间范围。


3.保存数据

当json文件合并好后,就是对数据的分析和保存了!

笔者使用了openpyxl库来创建excel表格。

由于json文件数据过于杂乱,因此必须做好剔除工作。


# 创建Excel文件并添加表头
workbook = openpyxl.Workbook()
worksheet = workbook.active
worksheet.title = "Search Results"
worksheet.append(["公司代码", "公司简称", "标题", "发布日期", "年报链接"])

# 定义需要剔除的标题关键词
exclude_keywords = ["摘要", "英文版", "披露", "风险提示", "督导","反馈","回复","业绩","说明会","意见","审核","独立董事","半年","已取消","补充","提示性","制度","规程","审计","ST","公告","声明","说明","受托"]

# 解析搜索结果并添加到Excel表格中
for item in all_results:
    company_code = item["secCode"]
    company_name = item["secName"]
    title = item["announcementTitle"].strip()

    # 剔除不需要的样式和特殊符号,并重新组合标题
    title = re.sub(r"<.*?>", "", title)
    title = title.replace(":", "")
    title = f"《{title}》"

    adjunct_url = item["adjunctUrl"]
    year = re.search(r"\d{4}", adjunct_url).group()
    publish_time = f"{year}"
    #拼串,将PDF文件的下载链接拼完整!
    announcement_url = f"http://static.cninfo.com.cn/{adjunct_url}"

    # 检查标题是否包含排除关键词
    exclude_flag = False
    for keyword in exclude_keywords:
        if keyword in title:
            exclude_flag = True
            break

    # 如果标题不包含排除关键词,则将搜索结果添加到Excel表格中
    if not exclude_flag:
        worksheet.append([company_code, company_name, title, publish_time, announcement_url])

 最后只需要将数据全部保存,就大功告成了!

workbook.save(f"上市企业年报链接_2015.xlsx")

python爬虫 上市公司年报,Python爬虫项目,python,爬虫,开发语言,金融,数据分析

笔者已将部分年报打包,关注同名公众号回复「年报」即可获取哦~文章来源地址https://www.toymoban.com/news/detail-765322.html

到了这里,关于【Python爬虫实战】1.爬取A股上市公司年报链接并存入Excel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 康为世纪科创板上市破发:跌幅超10% 公司市值41亿

    雷递网 雷建平 10月25日 江苏康为世纪生物科技股份有限公司(简称:“康为世纪”,股票代码为“688426”)今日在科创板上市。 康为世纪此次发行价为48.98元,发行2329万股,募资总额为11.4亿元。 康为世纪开盘价为42.96元,较发行价下跌12.3%;收盘价为43.62元,较发行价下跌

    2024年02月04日
    浏览(39)
  • python爬虫实战——小说爬取

    基于 requests 库和 lxml 库编写的爬虫,目标小说网站域名http://www.365kk.cc/,类似的小说网站殊途同归,均可采用本文方法爬取。 目标网站 :传送门 本文的目标书籍 :《我的师兄实在太稳健了》 “渡劫只有九成八的把握,和送死有什么区别?” 网络爬虫的工作实际上主要分为

    2024年02月06日
    浏览(40)
  • Python爬虫实战——爬取新闻数据(简单的深度爬虫)

            又到了爬新闻的环节(好像学爬虫都要去爬爬新闻,没办法谁让新闻一般都很好爬呢XD,拿来练练手),只作为技术分享,这一次要的数据是分在了两个界面,所以试一下深度爬虫,不过是很简单的。  网页url 1.先看看网站网址的规律  发现这部分就是每一天的新闻

    2024年02月11日
    浏览(42)
  • 六个步骤学会使用Python爬虫爬取数据(爬虫爬取微博实战)

    用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。 第一步:安装requests库和BeautifulSoup库 在程序中两个库的书写是这样的: 由于我使用的是pycharm进行的python编程。所以

    2024年02月08日
    浏览(54)
  • 上市后首份年报,读书郎去年净利下滑94%

    又是一年高考逐梦时,寒窗二十四年的读书郎如何克服“偏科”症? 近日,读书郎教育控股有限公司(下称“读书郎”,02385.HK)交出了上市后的首份年报。 3月29日,财报公布的首个交易日,其股价下跌0.27%;截至2023年6月5日港股收盘,读书郎报收8.06港元/股(折合人民币7.32元

    2024年02月08日
    浏览(36)
  • python爬虫实战(1)--爬取新闻数据

    想要每天看到新闻数据又不想占用太多时间去整理,萌生自己抓取新闻网站的想法。 使用python语言可以快速实现,调用 BeautifulSoup 包里面的方法 安装BeautifulSoup 完成以后引入项目 定义请求头,方便把请求包装成正常的用户请求,防止被拒绝 定义被抓取的url,并请求加上请求

    2024年02月13日
    浏览(54)
  • 【爬虫系列】Python爬虫实战--招聘网站的职位信息爬取

    1. 需求分析 从网上找工作,大家一般都会通过各种招聘网站去检索相关信息,今天利用爬虫采集招聘网站的职位信息,比如岗位名称,岗位要求,薪资,公司名称,公司规模,公司位置,福利待遇等最为关心的内容。在采集和解析完成后,使用 Excel 或 csv 文件保存。 2. 目标

    2024年02月02日
    浏览(48)
  • Python爬虫实战入门:爬取360模拟翻译(仅实验)

    需求 目标网站: https://fanyi.so.com/# 要求:爬取360翻译数据包,实现翻译功能 所需第三方库 requests 简介 requests 模块是 python 基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。 安装 pip install -i https://py

    2024年02月22日
    浏览(42)
  • Python应用-爬虫实战-求是网周刊文章爬取

    任务描述 本关任务:编写一个爬虫,并使用正则表达式获取求是周刊 2019 年第一期的所有文章的 url 。详情请查看《求是》2019年第1期 。 相关知识 获取每个新闻的 url 有以下几个步骤: 首先获取 2019 年第 1 期页面的源码,需要解决部分反爬机制; 找到目标 url 所在位置,观

    2024年02月04日
    浏览(47)
  • 爬虫学习记录之Python 爬虫实战:爬取研招网招生信息详情

    【简介】本篇博客 为爱冲锋 ,爬取北京全部高校的全部招生信息,最后持久化存储为表格形式,可以用作筛选高校。 此处导入本次爬虫所需要的全部依赖包分别是以下内容,本篇博客将爬取研招网北京所有高校的招生信息,主要爬取内容为学校,考试方式,所在学院,专业

    2024年01月24日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包