爬取东方财富网站股票信息每天运行都是同步网站更新的

本文介绍如何利用Python爬虫从东方财富网站抓取股票数据,并展示在Jupyter Notebook和CSV文件中的效果。

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

网址为:http://quote.eastmoney.com/center/gridlist.html#hs_a_board

先来看看效果

这是网站上的内容
这是网站上的

下面是用Jupyter Notebook运行效果,pycharm运行也是一样只是没Jupyter Notebook美观

这是从Jupyter Notebook运行效果

下面是保存在CSV表格中的效果

在这里插入图片描述

以下为代码

import requests,re,pandas
from fake_useragent import UserAgent

num=input('请输入你要爬取股票信息的页数,目前共有224页每页为20个股票数据\n')
UA={
   'User-Agent':UserAgent().random}
r1='"f14":"(.*?)",' #股票名称
r2='"f12":"(.*?)",' #股票代码
r3='"f2":(.*?),"'  #股票最新价
r4='"f3":(.*?),"'  #股票涨跌幅
r5='"f4":(.*?),"'  #股票涨跌额
r6='"f5":(.*?),"'  #股票成交量手
r7='"f6":(.*?),"'  #股票成交额
r8='"f7":(.*?),"'  #股票振幅
r9='"f15":(.*?),"' #股票最高
r10='"f16":(.*?),"'#股票最低
r11='"f17":(.*?),"'#股票今开
r12='"f18":(.*?),"'#股票昨收
r13='"f23":(.*?),"'#市净率
r14='"f8":(.*?),"'#换手率
r15='"f9":(.*?),"'#市盈率(动态)
r16='
### 抓取东方财富网所有股票数据的方法 要实现对东方财富网上所有股票数据的抓取,可以通过以下几个方面完成: #### 数据源地址 目标网址为东方财富网股票列表页面 `http://quote.eastmoney.com/stocklist.html`[^3]。该页面包含了所有的股票名称及其对应的代码。 #### 使用的技术栈 为了高效地抓取和存储数据,可以采用以下工具和技术: - **Requests** 或 **Urllib**: 用于发送 HTTP 请求获取网页内容。 - **BeautifulSoup** (来自 `bs4`) : 解析 HTML 页面结构提取所需数据。 - **Pandas**: 处理和清洗数据以便后续保存至 CSV 文件或 MySQL 数据库。 - **MySQL Connector** 或其他数据库驱动程序: 将数据写入 MySQL 数据库。 以下是具体实现方法的一个完整示例代码片段: ```python import requests from bs4 import BeautifulSoup import pandas as pd import mysql.connector # 定义函数获取股票列表页的内容 def fetch_stock_list(): url = 'http://quote.eastmoney.com/stocklist.html' headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') stock_data = [] stocks = soup.find_all('a', attrs={'target': '_blank'}) for stock in stocks: name_code = stock.text.strip() if '(' in name_code and ')' in name_code: code = name_code.split('(')[-1].split(')')[0] name = name_code.split('(')[0] stock_data.append({'name': name, 'code': code}) return stock_data # 获取股票数据转换成 DataFrame 格式 stocks_df = pd.DataFrame(fetch_stock_list()) # 存储到本地 CSV 文件 stocks_df.to_csv('eastmoney_stocks.csv', index=False) # 连接 MySQL 创建表 db_config = { 'host': 'localhost', 'user': 'root', 'password': 'your_password', 'database': 'stock_db' } connection = mysql.connector.connect(**db_config) cursor = connection.cursor() create_table_query = """ CREATE TABLE IF NOT EXISTS stocks ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), code VARCHAR(20) ); """ cursor.execute(create_table_query) # 插入数据到 MySQL 表中 for _, row in stocks_df.iterrows(): insert_query = f"INSERT INTO stocks (name, code) VALUES ('{row['name']}', '{row['code']}');" cursor.execute(insert_query) connection.commit() cursor.close() connection.close() ``` 上述代码完成了从东方财富网抓取所有股票数据的任务,分别将这些数据保存到了本地 CSV 文件以及 MySQL 数据库中的 `stocks` 表里[^1]^。 #### 关键点说明 1. **反爬机制规避** - 添加自定义 User-Agent 避免被服务器识别为机器人访问而拒绝服务。 2. **HTML 结构解析** - 利用 BeautifulSoup 提取出 `<a>` 标签内的文字信息,其中包含股票名与编号组合字符串,再通过简单的字符串分割得到单独的名字和编码. 3. **异常处理** - 实际开发时应加入更多的错误捕获逻辑以应对网络波动或者目标站点结构调整带来的影响。 4. **性能优化建议** - 如果涉及大量发请求,则考虑引入异步框架如 aiohttp 来提高效率;另外注意遵守网站 robots.txt 协议设定合理的延迟时间间隔以免给对方造成过大负担[^4]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值