可朗 2024-05-07 21:18 采纳率: 0%
浏览 5

python爬取股票数据

写一个爬虫代码,从新浪财经爬取中国船舶至少400个交易日的股票数据,显示效果为第1列:股票代码、第2列:交易日期、第3列:收盘价、第4列:最高价、第5列:最低价、第6列:开盘价、第7列:前收盘、第8列:涨跌额、第9列:涨跌幅、第10列:换手率、第11列:成交量、第12列:成交金额、第13列:总市值、第14列:流通市值

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 21:18
    关注

    引自免费微信小程序:皆我百晓生

    要编写一个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的配置是否正确。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月7日

悬赏问题

  • ¥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本地登录失败