Python零基础爬取东方财富网股票行情数据指南

简介: 东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。

​免费编程软件「python+pycharm」
链接:https://pan.quark.cn/s/48a86be2fdc0

一、为什么选择东方财富网?
东方财富网是中国领先的金融信息服务平台,其股票行情页面实时更新沪深两市股票数据,包含代码、名称、价格、涨跌幅等关键字段。相比其他财经网站,东方财富网的数据接口更稳定,且未设置严格的反爬虫验证,适合初学者练习爬虫技术。
探秘代理IP并发连接数限制的那点事 (100).png

二、爬取前的准备工作

  1. 安装必要库
    pip install requests beautifulsoup4 pandas matplotlib
    requests:发送HTTP请求获取网页内容
    BeautifulSoup:解析HTML提取数据
    pandas:处理表格数据并保存为CSV
    matplotlib:绘制股票数据可视化图表(可选)
  2. 模拟浏览器访问
    东方财富网会检测请求头中的User-Agent,若发现是爬虫可能拒绝响应。需在请求中添加浏览器标识:

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

三、基础爬取:静态页面解析

  1. 获取网页内容
    import requests

url = "http://quote.***.com/center/gridlist.html#hs_a_board"
response = requests.get(url, headers=headers)

if response.status_code == 200:
html_content = response.text
else:
print("请求失败,状态码:", response.status_code)

  1. 解析HTML表格
    东方财富网的股票数据存储在
    标签中,每行
对应一只股票:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')
table = soup.find('table', {'class': 'table'}) # 定位表格
rows = table.find_all('tr')[1:] # 跳过表头

stock_data = []
for row in rows:
cols = row.find_all('td')
stock_info = {
'代码': cols[0].text.strip(),
'名称': cols[1].text.strip(),
'最新价': cols[2].text.strip(),
'涨跌幅': cols[3].text.strip(),
'成交量(手)': cols[4].text.strip()
}
stock_data.append(stock_info)

  1. 保存为CSV文件
    import pandas as pd

df = pd.DataFrame(stock_data)
df.to_csv('stock_data.csv', index=False, encoding='utf-8')
print("数据已保存至stock_data.csv")
四、进阶技巧:应对动态加载与反爬虫

  1. 处理动态加载内容
    若页面数据通过JavaScript动态加载,静态解析可能获取空值。此时需使用Selenium模拟浏览器行为:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

配置ChromeDriver(需提前下载并设置路径)

driver = webdriver.Chrome(service=Service('path/to/chromedriver'))
driver.get(url)

等待页面加载完成(显式等待更可靠)

driver.implicitly_wait(10)

提取数据(示例:通过XPath定位)

stock_elements = driver.find_elements(By.XPATH, '//table[@class="table"]//tr[position()>1]')
stock_data = []
for element in stock_elements:
cols = element.find_elements(By.TAG_NAME, 'td')
stock_info = {
'代码': cols[0].text,
'名称': cols[1].text,
'最新价': cols[2].text
}
stock_data.append(stock_info)

driver.quit()

  1. 反爬虫应对策略
    (1)IP封禁解决方案
    代理池:使用免费或付费代理IP轮换请求。
    proxies = {
    'http': 'http://10.10.10.10:8080',
    'https': 'https://10.10.10.10:8080'
    }
    response = requests.get(url, headers=headers, proxies=proxies)

住宅代理:推荐使用站大爷IP代理等服务商,模拟真实用户IP。
(2)请求频率控制
避免短时间内发送大量请求,可通过time.sleep()添加延迟:

from fake_useragent import UserAgent

ua = UserAgent()
headers = {"User-Agent": ua.random}

(3)随机User-Agent
使用fake_useragent库生成随机浏览器标识:

from fake_useragent import UserAgent

ua = UserAgent()
headers = {"User-Agent": ua.random}

五、数据可视化(可选)
使用matplotlib绘制股票涨跌幅分布图:

import matplotlib.pyplot as plt

转换涨跌幅为数值

df['涨跌幅'] = df['涨跌幅'].str.replace('%', '').astype(float)

绘制直方图

plt.figure(figsize=(10, 6))
plt.hist(df['涨跌幅'], bins=30, color='skyblue', edgecolor='black')
plt.title('股票涨跌幅分布')
plt.xlabel('涨跌幅 (%)')
plt.ylabel('股票数量')
plt.grid(True)
plt.show()

六、完整代码示例
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
from fake_useragent import UserAgent

def fetch_stock_data():

# 配置请求头
ua = UserAgent()
headers = {"User-Agent": ua.random}
url = "http://quote.***.com/center/gridlist.html#hs_a_board"

try:
    # 获取网页内容
    response = requests.get(url, headers=headers, timeout=10)
    response.raise_for_status()
    html_content = response.text

    # 解析HTML
    soup = BeautifulSoup(html_content, 'html.parser')
    table = soup.find('table', {'class': 'table'})
    rows = table.find_all('tr')[1:]

    # 提取数据
    stock_data = []
    for row in rows:
        cols = row.find_all('td')
        stock_info = {
            '代码': cols[0].text.strip(),
            '名称': cols[1].text.strip(),
            '最新价': cols[2].text.strip(),
            '涨跌幅': cols[3].text.strip(),
            '成交量(手)': cols[4].text.strip()
        }
        stock_data.append(stock_info)

    # 保存为CSV
    df = pd.DataFrame(stock_data)
    df.to_csv('stock_data.csv', index=False, encoding='utf-8')
    print("数据爬取成功,已保存至stock_data.csv")

except Exception as e:
    print("爬取失败:", e)

if name == "main":
fetch_stock_data()

七、常见问题Q&A
Q1:被网站封IP怎么办?
A:立即启用备用代理池,建议使用住宅代理(如站大爷IP代理),配合每请求更换IP策略。也可通过requests.proxies参数动态切换代理:

proxies_list = [
{'http': 'http://ip1:port', 'https': 'https://ip1:port'},
{'http': 'http://ip2:port', 'https': 'https://ip2:port'}
]

for proxy in proxies_list:
try:
response = requests.get(url, headers=headers, proxies=proxy, timeout=5)
if response.status_code == 200:
break
except:
continue

Q2:如何获取历史股票数据?
A:东方财富网的历史数据需通过API接口获取,需分析网络请求参数。也可使用第三方库如akshare:

import akshare as ak
df = ak.stock_zh_a_hist(symbol="600519", period="daily", start_date="20240101", end_date="20241231")
df.to_csv("history_data.csv")

Q3:爬取的数据不完整怎么办?
A:检查是否遗漏了动态加载的内容,尝试使用Selenium模拟浏览器操作。若数据通过分页加载,需构造多页URL循环爬取:

base_url = "http://quote.***.com/center/gridlist.html#hs_a_board&pn={}"
all_data = []

for page in range(1, 6): # 爬取前5页
url = base_url.format(page)
response = requests.get(url, headers=headers)

# 解析逻辑同上...

Q4:是否需要登录才能爬取?
A:东方财富网的公开行情数据无需登录,但部分深度数据(如研报)可能需要账号权限。此时需通过requests.Session()维护登录状态:

session = requests.Session()
login_url = "https://passport.***.com/login"
login_data = {"username": "your_username", "password": "your_password"}
session.post(login_url, data=login_data) # 模拟登录

登录后使用session请求数据

response = session.get("目标URL", headers=headers)

八、总结与注意事项
遵守robots协议:爬取前检查https://www.****.com/robots.txt,避免抓取禁止的内容。
控制请求频率:建议每秒不超过1次请求,避免对服务器造成压力。
数据合法使用:仅将爬取的数据用于个人学习或合法研究,不得用于商业盈利。
错误处理:添加异常捕获(如try-except),避免程序因网络问题崩溃。
通过本文的方法,零基础读者也能快速掌握东方财富网股票数据的爬取技巧。随着实践深入,可进一步学习Scrapy框架、分布式爬虫等高级技术。

目录
相关文章
|
1月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
289 0
|
27天前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
1月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
2月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
2月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
340 0
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
261 2
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
258 2
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
167 1
|
12月前
|
数据采集 数据可视化 数据挖掘
Python数据分析:Pandas库实战指南
Python数据分析:Pandas库实战指南

推荐镜像

更多