爬取网易财经全部A股上市公司年报

本文介绍如何获取所有A股上市公司的股票代码,并以东方财富网为起点,详细阐述了爬取网易财经中各公司资产负债表、利润表和现金流量表的步骤,最终实现对3654家公司的财务数据的全面抓取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要找到所有A股上市公司的股票代码,将东方财富网列表中所有的股票的代码(6位数字号)取下来

东方财富网股票代码列表: http://quote.eastmoney.com/stocklist.html

<a target="_blank" href="http://quote.eastmoney.com/sh500001.html">基金金泰(500001)</a>

从网页中找到我们要的信息,保存在字典中,写入"stock_name.txt"文件

# -*- coding: utf-8 -*-
"""
Created on Tue Oct  9 00:03:46 2018

@author: South
"""

import requests
import time
import sys
import json
import os 
def get_file(url, filename):    
    r = requests.get(url)    
    try:
        with open(filename, 'wb') as file:        
            file.write(r.content)
    except:
        print(filename)
        pass

def check_file(filename):    
    '''检查有没有被反爬'''    
    if os.path.exists(filename):        
        with open(filename, 'r') as f:   
### 使用Python爬取A上市公司年报数据 要完成A上市公司年报数据的爬取任务,可以按照以下方法构建程序逻辑。以下是详细的解决方案: #### 数据获取阶段 通过网络请求库 `requests` 和正则表达式模块 `re` 来发送 HTTP 请求并解析返回的内容。目标网站为巨潮资讯网(http://www.cninfo.com.cn),该网站提供了丰富的上市公司公告资源。 ```python import requests import re from bs4 import BeautifulSoup import pandas as pd import time # 定义请求头模拟浏览器行为 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', } def fetch_annual_report_links(search_key="年报", start_date="2016-01-01", end_date="2017-01-01"): """ 获取指定时间段内的年报链接列表。 :param search_key: 搜索关键词,默认为“年报” :param start_date: 开始日期 :param end_date: 结束日期 :return: 年报链接及其相关信息组成的 DataFrame """ base_url = "http://www.cninfo.com.cn/new/fulltextSearch" params = { "searchkey": search_key, "sdate": start_date, "edate": end_date, "isfulltext": False, "sortName": "pubdate", "sortType": "desc", "pageNum": "{page_num}", "type": "shj" } all_data = [] page_num = 1 while True: try: response = requests.get(base_url, headers=headers, params=params.format(page_num=page_num)) soup = BeautifulSoup(response.text, 'html.parser') # 提取页面中的公告信息 items = soup.select('.sr-list-content .doc-title a') dates = soup.select('.time') if not items or not dates: break for item, date in zip(items, dates): link = "http://www.cninfo.com.cn" + item['href'] title = item.get_text(strip=True) pub_date = date.get_text(strip=True) all_data.append({ "title": title, "link": link, "publication_date": pub_date }) page_num += 1 time.sleep(1) # 防止频繁请求被封禁 except Exception as e: print(f"Error occurred on page {page_num}: {e}") break return pd.DataFrame(all_data) df_annual_reports = fetch_annual_report_links() print(df_annual_reports.head()) ``` 此部分代码实现了对特定时间范围内的年报链接提取功能[^2]。它会遍历每一页的结果直到没有更多记录为止,并将结果保存到 Pandas 的 DataFrame 中以便进一步处理。 --- #### 数据清洗与分析阶段 一旦获得了原始数据之后,则需对其进行必要的清理工作来提高可用性和准确性。例如去除重复项、填补缺失值以及标准化字段名等操作均属于此类范畴之内。 对于某些特殊需求而言可能还需要额外加入一些自定义函数来进行更深层次的数据挖掘活动;比如计算财务比率或者绘制趋势图表等等都可以借助第三方库如 Matplotlib 或 PyEcharts 实现可视化展示效果[^1]。 --- #### 存储至文件或数据库 最后一步就是决定如何持久化这些宝贵的信息了——可以选择将其导出成 Excel 表格供日后查阅使用亦或是直接插入关系型数据库当中以支持实时查询服务等功能扩展可能性更大些。 下面给出了一种简单的方式即将最终整理好的数据集写入本地 CSV 文件之中作为例子说明: ```python output_file = "./annual_reports.csv" if not df_annual_reports.empty: df_annual_reports.to_csv(output_file, index=False, encoding='utf-8-sig') else: print("No data found.") ``` 这样就完成了整个流程的设计与实施过程概述[^3]。 --- ### 注意事项 由于目标站点可能存在反爬机制,在实际运行过程中需要注意控制访问频率以免触发防护措施而导致 IP 被暂时封锁等问题发生。另外考虑到法律法规方面的要求,请务必确认所采取的行为符合相关规定后再行动!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值