写一个爬虫代码,从新浪财经爬取中国船舶至少400个交易日的股票数据,显示效果为第1列:股票代码、第2列:交易日期、第3列:收盘价、第4列:最高价、第5列:最低价、第6列:开盘价、第7列:前收盘、第8列:涨跌额、第9列:涨跌幅、第10列:换手率、第11列:成交量、第12列:成交金额、第13列:总市值、第14列:流通市值
4条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
要编写一个Python爬虫来获取新浪财经上的中国船舶(股票代码:600150)的历史数据,你需要使用requests库来发送HTTP请求,BeautifulSoup库来解析HTML页面,以及pandas库来处理数据。下面是一个详细的步骤指南和代码示例。
首先确保安装了所需的库:
pip install requests beautifulsoup4 pandas
接下来,我会提供一个完整的Python脚本,用于爬取股票历史数据并将其保存到CSV文件中。请注意,由于新浪财经网站的数据是动态加载的,我们无法直接通过普通的GET请求获取所有数据。这里我们将使用Selenium库来模拟浏览器行为,以便获取完整的HTML内容。
Step 1: 安装Selenium库:
pip install selenium
Step 2: 下载ChromeDriver(根据你的浏览器版本选择合适的驱动程序),并将其添加到系统的PATH环境变量中。 下载地址
Step 3: 使用以下Python代码编写爬虫:
import os import time import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options # 设置股票代码 stock_code = "600150" # 设置网页URL url = f"https://vip.stock.finance.sina.com.cn/q/go.php/vCISSKLine/kind/szsh/index.phtml?symbol={stock_code}" # 创建ChromeOptions对象,并禁用图片加载以加快速度 chrome_options = Options() chrome_options.add_argument("--headless") # 无头模式,不打开浏览器窗口 chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") # 初始化webdriver driver = webdriver.Chrome(options=chrome_options) driver.implicitly_wait(10) # 等待元素加载时间 # 访问股票页面 driver.get(url) # 获取表格数据 data_rows = driver.find_elements_by_xpath("//table[@id='kline_table']/tbody/tr") data_list = [] # 遍历行并提取数据 for row in data_rows: cols = row.find_elements_by_tag_name("td") cols_data = [col.text.strip() for col in cols] data_list.append(cols_data) # 关闭webdriver driver.quit() # 将数据转换为DataFrame df = pd.DataFrame(data_list, columns=[ '交易日期', '开盘价', '最高价', '最低价', '收盘价', '涨跌额', '涨跌幅', '振幅', '换手率', '成交量', '成交金额', '市盈率(TTM)', '市净率', '流通市值' ]) # 格式化日期列 df['交易日期'] = pd.to_datetime(df['交易日期'], format='%Y-%m-%d') # 输出数据 print(df) # 保存到CSV文件 df.to_csv(f"{stock_code}_history.csv", index=False)
这段代码会打开一个新的无头Chrome浏览器窗口,访问指定的股票页面,然后抓取历史数据。注意,这个过程可能会比较慢,因为每次请求都需要等待页面加载完成。爬取完成后,数据将被保存为CSV文件。
由于新浪财经网站的数据可能有更新频率限制,频繁请求可能会导致IP被封禁。在实际操作时,你可能需要加入一些延迟机制,例如使用time.sleep()函数在请求之间插入一定的时间间隔,或者使用更复杂的反爬策略,比如设置代理IP等。
此外,由于网络环境和个人电脑性能的不同,实际运行结果可能会有所不同。如果遇到任何问题,可以检查网络连接、Selenium和ChromeDriver的配置是否正确。
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥100 如何寻找到黑客帮助,愿意付丰厚的酬劳
- ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
- ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
- ¥15 PPOCRLabel
- ¥15 混合键合键合机对准标识
- ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
- ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
- ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
- ¥200 C++表格文件处理-悬赏
- ¥15 Windows Server2016本地登录失败