利用bs4和requests爬取股票历史交易数据

本文介绍了如何利用Python的requests和BeautifulSoup库爬取网易财经的股票历史交易数据。通过构建URL参数,针对特定股票、年度和季度获取交易记录,并将数据保存到CSV文件中。详细步骤包括构造URL、解析HTML表格、数据处理以及循环爬取多个季度的数据。源代码已开源在GitHub上。

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

最近在学习优达学院的一门机器学习的课程,主要讲解利用机器学习分析股票数据,然后闭嘴闭嘴闭嘴。课程网址在这里:https://classroom.udacity.com/courses/ud501

所以需要大量的股票数据,我就先百度了一下,发现网易财经的数据很全,暴露的也很好,所以的数据都是放在一个<table>标签中,


所以我就决定爬网易财经了,开始着手写爬虫。

首先,是构造url。

假如我要查询中国石油(601857)的2016年度的第三季度的交易数据,url是这样的。

http://quotes.money.163.com/trade/lsjysj_601857.html?year=2016&season=3

我们发现,这段url有3个参数,股票的代码601857,年度2016,季度3

只要

### 编写Python程序爬取过去一年的股票数据 为了实现这一目标,可以采用`requests`库来发起HTTP请求获取网页内容,并利用`BeautifulSoup`库解析HTML文档。对于更复杂的API交互或动态加载的内容,则可能需要用到`pandas`处理数据以及`selenium`模拟浏览器行为。 #### 准备工作 安装必要的第三方库可以通过pip命令完成: ```bash pip install requests beautifulsoup4 pandas selenium ``` #### 获取页面内容 构建一个函数用于访问指定日期区间内的股票行情页: ```python import requests from datetime import date, timedelta def fetch_stock_page(stock_code, start_date, end_date): base_url = f"http://example.com/stock/{stock_code}/history?" params = { 'start': start_date.strftime('%Y-%m-%d'), 'end': end_date.strftime('%Y-%m-%d') } try: response = requests.get(base_url, params=params) response.raise_for_status() return response.text except Exception as e: print(f"Error fetching page: {e}") return None ``` 此处假设存在这样一个URL模式可以直接接收起始结束日期作为参数查询特定时间段的数据[^2]。 #### 解析并提取所需信息 定义另一个辅助方法负责从返回的结果中抽取有用的信息片段: ```python from bs4 import BeautifulSoup def parse_html(html_content): soup = BeautifulSoup(html_content, "lxml") table_body = soup.find('tbody') rows = [] if not table_body: return rows for row in table_body.find_all('tr'): cols = row.find_all('td') cols = [ele.text.strip() for ele in cols] # 这里可以根据实际情况调整列数及含义 record = { 'date': cols[0], 'open_price': float(cols[1].replace(',', '')), 'close_price': float(cols[2].replace(',', '')), 'high_price': float(cols[3].replace(',', '')), 'low_price': float(cols[4].replace(',', '')), 'volume': int(cols[5].replace(',', '')) } rows.append(record) return rows ``` 这段代码会遍历表格中的每一行记录,并将其转换成字典形式存储起来以便后续操作[^3]。 #### 主逻辑流程控制 最后,在主程序部分调用上述两个组件组合而成的功能模块,循环读取每一天的历史交易情况直至覆盖整个年度周期: ```python if __name__ == "__main__": stock_id = input("请输入要抓取的股票代码:") today = date.today() one_year_ago = today - timedelta(days=365) raw_pages = fetch_stock_page(stock_id, one_year_ago, today) parsed_records = parse_html(raw_pages) df = pd.DataFrame(parsed_records) output_file_path = f"./{stock_id}_last_year.csv" df.to_csv(output_file_path, index=False, encoding='utf-8-sig') print(f"成功保存至文件:{output_file_path}") ``` 以上就是完整的基于Python编写的简单版股票历史数据收集器的设计思路与具体实施步骤[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值