精华内容
下载资源
问答
  • python 3.6 pycharm requests csv time 相关模块pip安装即可 目标网页 分析网页 一切的一切都在图里 找到数据了,直接请求网页,解析数据,保存数据 请求网页 import requests url = '...
  • 主要介绍了Python爬取股票信息,并可视化数据的示例,帮助大家更好的理解和使用python爬虫,感兴趣的朋友可以了解下
  • 通过A股API接口爬取19年股票交易信息,包括开盘收盘最高最低等指标,并利用python对其进行数据可视化,进行股票技术分析。可视化内容包括了k线图、均线图、MACD、RSI、和相关系数。用到的库有numpy、matplotlib、...
  • python爬取股票数据

    2021-02-05 11:31:35
    87.49而标普500指数ETF(SPY)...具体来说就是先继承HTMLParser,然后在自定义的子类中重载handle_data(self, data)方法,查找包含相应id字符串(例如实时报价的id字符串为"yfs_l84_"+股票代码)的HTML标记,并输出这个...

    87.49

    而标普500指数ETF(SPY)

    其中实时报价的HTML标记为

    [html] view plain copy

    187.25

    因此本数据抓取程序根据相应的id字符串来查找数据。具体来说就是先继承HTMLParser,然后在自定义的子类中重载handle_data(self, data)方法,查找包含相应id字符串(例如实时报价的id字符串为"yfs_l84_"+股票代码)的HTML标记,并输出这个HTML标记中的数据(例如qqq的87.49,其中的数据87.49就是实时报价。)

    样本输出:

    数据依次是

    数据日期 股票代码  股票名称 实时报价  日变化率 日最低价  日最高价

    [python] view plain copy

    05/05/2014  ibb iShares Nasdaq Biotechnology (IBB)  233.28  1.85%   225.34  233.28

    05/05/2014  socl    Global X Social Media Index ETF (SOCL)  17.48   0.17%   17.12   17.53

    05/05/2014  pnqi    PowerShares NASDAQ Internet (PNQI)  62.61   0.35%   61.46   62.74

    05/05/2014  xsd SPDR S&P Semiconductor ETF (XSD)    67.15   0.12%   66.20   67.41

    05/05/2014  ita iShares US Aerospace & Defense (ITA)    110.34  1.15%   108.62  110.56

    05/05/2014  iai iShares US Broker-Dealers (IAI) 37.42   -0.21%  36.86   37.42

    05/05/2014  vbk Vanguard Small Cap Growth ETF (VBK) 119.97  -0.03%  118.37  120.09

    05/05/2014  qqq PowerShares QQQ (QQQ)   87.95   0.53%   86.76   87.97

    05/05/2014  ewi iShares MSCI Italy Capped (EWI) 17.86   -0.56%  17.65   17.89

    05/05/2014  dfe WisdomTree Europe SmallCap Dividend (DFE)   62.33   -0.11%  61.94   62.39

    05/05/2014  pbd PowerShares Global Clean Energy (PBD)   13.03   0.00%   12.97   13.05

    05/05/2014  eirl    iShares MSCI Ireland Capped (EIRL)  38.52   -0.16%  38.39   38.60

    展开全文
  • 项目介绍可查看作者MLDan写的文章:作为一个程序员,总喜欢在股市里面晃荡,无奈总是当成韭菜收割了。每一次都是卖涨买跌,处处碰壁。但是作为一个有一定阅历的...于是,开始编写了爬取股票数据并进行数据分析的程序。
  • python爬取股票数据并存到数据库

    千次阅读 2021-03-27 01:37:49
    Python 用Tushare接口获取股票数据并存储到Sqlite数据库 使用技术介绍: 关于接口 由于tushare旧版本即将不能用了,所以我们这里使用的是tushare pro 接口。 关于数据库 使用了Sqlite轻量级数据库适合本地使用。 ...

    Python 用Tushare接口获取股票数据并存储到Sqlite数据库

    1. 使用技术介绍:
      关于接口 由于tushare旧版本即将不能用了,所以我们这里使用的是tushare pro 接口。

      关于数据库 使用了Sqlite轻量级数据库适合本地使用。

      关于爬取的数据 共12种数据,如下ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount, avgprice

      关于py文件 共三个 分别是Tushare.py, config.py, SQLserver .py

    2. 具体实现

    要import的库

    import tushare as t1# t1 是旧版本后面的ts = t1.pro_api() 是变为pro版本
    import time # 用以计时
    from config import * # 此库为配置库
    from SQLserver import * # 此库为作者所写
    
    1. Tushare Pro 爬取数据
      Pro接口需要前往官网(https://tushare.pro/)注册,并获取token,过程较为繁琐,而本文篇幅有限故将在之后更新获取token文章。
      将获取到的token值放进config文件中的tushare字典中。
    # -*- coding: utf-8 -*-
    """此为存放配置信息的config.py"""
    tushare = {"token":"", "column": ['ts_code', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount'],} # 冒号里为您的token值
    dbPath = r'\database.db' # 数据库路径
    Stock_list={"平安银行": "000001.SZ","万科A": "000002.SZ",
                  "国华网安": "000004.SZ",
                  "世纪星源": "000005.SZ",
                  "深振业A": "000006.SZ",
                  "全新好": "000007.SZ"} # 股票名称和代码字典 有需要的我会在后续写如何获取名称和列表的文章
    
    
    class Fetch_Data():
        """code股票代码 sd开始日期 ed结束日期"""
    
        def __init__(self, code, start_data, end_data):
            self.code = code
            self.sd = start_data
            self.ed = end_data
            # self.csv_name = "csv_data/" + csv_name + ".csv"
    
        def web_spider(self):  # 爬虫tushare接口
            try:
                df = ts.daily(ts_code=self.code, start_date=self.sd, end_date=self.ed)  # 爬取数据--dataframe格式
                # daily方法所获取的数据ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,avgprice
                # df.to_csv(self.csv_name) # 转换为csv文件
                return df  # 返回数据
            except Exception as e:
    			print(e) # 打印报错信息
    

    当然仅有这段代码是不行的,我们还需要初始化tushare接口。初始化本写在main中,这里为了方便大家使用提到前面来说。

            t1.set_token(tushare["token"])  # 存在config里的token值
            ts = t1.pro_api()  # 初始化pro接口
    

    2.存储到Sqlite数据库

    # 存储到数据库
    class Sql_Data_Handle():
        def __init__(self, df, connect, curs):
            self.df = df
            self.connect = connect
            self.curs = curs
    
        def character(self):
            # df = pandas.read_csv(self.csv_name, encoding='gbk') # 用pandas库读取csv文件
            line_num = self.line_num
            # pandas的iloc函数读取每行对应数据
            ts_code = self.df.iloc[line_num]["ts_code"]
            trade_date = self.df.iloc[line_num]["trade_date"]
            open = self.df.iloc[line_num]["open"]
            high = self.df.iloc[line_num]["high"]
            low = self.df.iloc[line_num]["low"]
            close = self.df.iloc[line_num]["close"]
            pre_close = self.df.iloc[line_num]["pre_close"]
            change = self.df.iloc[line_num]["change"]
            pct_chg = self.df.iloc[line_num]["pct_chg"]
            vol = self.df.iloc[line_num]["vol"]
            amount = self.df.iloc[line_num]["amount"]
            # 将数据转换为元祖tuple格式
            values = (
                ts_code, trade_date, float(open), float(high), float(low), float(close), float(pre_close),
                float(change), float(pct_chg), float(vol), float(amount))
            return values
        def add_data(self):
    
            self.line_num = len(self.df) - 1
            # 循环调用character()函数-读取每行数据
            while self.line_num >= 0:
                value_list = self.character()
                try:
                    # 插入数据库
                    Sql.Sql_execution(
                        f"""insert into stock ({tushare["Column"]}) values """ + f"(\'{value_list[0]}\',\'{value_list[1]}\',\'{value_list[2]}\',\'{value_list[3]}\',\'{value_list[4]}\',\'{value_list[5]}\',\'{value_list[6]}\',\'{value_list[7]}\',\'{value_list[8]}\',\'{value_list[9]}\',\'{value_list[10]}\')")
                except Exception:
                    # 出错信息
                    print(f"{value_list[0]}-{value_list[1]}未被添加!")
                self.line_num -= 1
                i += 1
            print(f"The data has been added to the stock database")
            return i
    

    3.主函数
    包括了连接数据库 初始化tushare Pro接口 调用Fetch_Data,Sql_Data_Handle类 计算添加用时和添加数据条数的功能。

    if __name__ == '__main__':
        count = 0
        line_count = len(Stock_list)
        print("连接数据库")
        Sql = DataServer_Sqlite3("stock")  # 连接数据库
        stock_code = Stock_list
        # Sql.Empty_database()  # 清空数据库
        # print("清空数据库")
        # Sql.Zero_Id()  # 将ID归零
        # print("将ID归零")
    for key in stock_code:
        try:
            column = tushare["column"] # config中的tushare字典
            t1.set_token(tushare["token"])  # token值
            ts = t1.pro_api()  # 初始化pro接口
            print("初始化pro接口成功")
            input_code = stock_code[key]
            sd, ed = "20181231", "20201231"  # 起始日期,结束日期
            print(f"抓取{key}股票数据")
            start = time.perf_counter()  # 开始时间
            df = Fetch_Data(input_code, sd, ed).web_spider()  # dataframe格式股票数据
            line_num = Sql_Data_Handle(df, Sql.connection, Sql.curs).add_data()
            end = time.perf_counter()  # 结束时间
            # 记录用时
            print(f"添加{key}股票数据到数据库--成功,用时{start - end}")
            # 记录添加的数据条数
            print(f"{key} 共{line_num}条数据已添加到数据库!")
        except Exception as e:
            print e
        count += 1
        print(f"还剩{line_count - count}支股票...")
    

    4.SQLserver作者用来处理sql语句所写的类。包括了连接数据库,执行sql语句,删除数据,拿取数据,清空数据库,归零id 功能。方便使用者使用。

    # -*- coding: utf-8 -*-
    """此为处理sql语句的SQLserver.py"""
    import sqlite3
    import config
    
    
    class DataServer_Sqlite3():
        def __init__(self, db_name):
            self.curs = ''
            self.connection = ''
            self.header = ''
            self.data = ''
            self.db_name = db_name
            self.Connecting_database()
    
        def Connecting_database(self):
            self.connection = sqlite3.connect(config.dbPath)  # 连接数据库
            self.curs = self.connection.cursor()
    
        def Sql_execution(self, sql: str):
            self.curs = self.curs.execute(sql)
            self.connection.commit()
    
        def delete_data(self, key, data):
            self.curs = self.curs.execute(f"delete from " + key + " where trade_date=" + data)
            self.connection.commit()
            print("The data has been deleted")
    
        def Fetch_data(self):
            self.header = self.curs.description
            self.data = self.curs.fetchall()
    
        def Empty_database(self, db_name: str):
            self.curs = self.curs.execute(f"DELETE FROM \"{db_name}\"")
            self.connection.commit()
    
        def Zero_Id(self):
            self.curs = self.curs.execute(f"update sqlite_sequence set seq=0 where name='{self.db_name}'")
            self.connection.commit()
    
        def Create_table(self, name: str, input_header: str):
            """sample: input_header =int primary key,ts_code,symbol,name,area,industry,market,list_date"""
            self.Sql_execution(f"create table {name}({input_header})")
    

    用Tushare接口爬取完整代码

    # -*- coding: utf-8 -*-
     """此处为用于爬取和存储到数据库的Tushare.py"""
    import tushare as t1
    import time # 用以计时
    from config import * # 此库为配置库
    from SQLserver import * # 此库为作者所写
    
    class Fetch_Data():
        """code股票代码 sd开始日期 ed结束日期"""
    
        def __init__(self, code, start_data, end_data):
            self.code = code
            self.sd = start_data
            self.ed = end_data
            # self.csv_name = "csv_data/" + csv_name + ".csv"
    
        def web_spider(self):  # 爬虫tushare接口
            try:
                df = ts.daily(ts_code=self.code, start_date=self.sd, end_date=self.ed)  # 爬取数据--dataframe格式
                # daily方法所获取的数据ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount,avgprice
                # df.to_csv(self.csv_name) # 转换为csv文件
                return df  # 返回数据
            except Exception as e:
    			print(e) # 打印报错信息
    class Sql_Data_Handle():
        def __init__(self, df, connect, curs):
            self.df = df
            self.connect = connect
            self.curs = curs
    
        def character(self):
            # df = pandas.read_csv(self.csv_name, encoding='gbk') # 用pandas库读取csv文件
            line_num = self.line_num
            # pandas的iloc函数读取每行对应数据
            ts_code = self.df.iloc[line_num]["ts_code"]
            trade_date = self.df.iloc[line_num]["trade_date"]
            open = self.df.iloc[line_num]["open"]
            high = self.df.iloc[line_num]["high"]
            low = self.df.iloc[line_num]["low"]
            close = self.df.iloc[line_num]["close"]
            pre_close = self.df.iloc[line_num]["pre_close"]
            change = self.df.iloc[line_num]["change"]
            pct_chg = self.df.iloc[line_num]["pct_chg"]
            vol = self.df.iloc[line_num]["vol"]
            amount = self.df.iloc[line_num]["amount"]
            # 将数据转换为元祖tuple格式
            values = (
                ts_code, trade_date, float(open), float(high), float(low), float(close), float(pre_close),
                float(change), float(pct_chg), float(vol), float(amount))
            return values
        def add_data(self):
    
            self.line_num = len(self.df) - 1
            # 循环调用character()函数-读取每行数据
            while self.line_num >= 0:
                value_list = self.character()
                try:
                    # 插入数据库
                    Sql.Sql_execution(
                        f"""insert into stock ({tushare["Column"]}) values """ + f"(\'{value_list[0]}\',\'{value_list[1]}\',\'{value_list[2]}\',\'{value_list[3]}\',\'{value_list[4]}\',\'{value_list[5]}\',\'{value_list[6]}\',\'{value_list[7]}\',\'{value_list[8]}\',\'{value_list[9]}\',\'{value_list[10]}\')")
                except Exception:
                    # 出错信息
                    print(f"{value_list[0]}-{value_list[1]}未被添加!")
                self.line_num -= 1
                i += 1
            print(f"The data has been added to the stock database")
            return i
    
    if __name__ == '__main__':
        count = 0
        line_count = len(Stock_list)
        print("连接数据库")
        Sql = DataServer_Sqlite3("stock")  # 连接数据库
        stock_code = Stock_list
        # Sql.Empty_database()  # 清空数据库
        # print("清空数据库")
        # Sql.Zero_Id()  # 将ID归零
        # print("将ID归零")
    for key in stock_code:
        try:
            column = tushare["column"] # config中的tushare字典
            t1.set_token(tushare["token"])  # token值
            ts = t1.pro_api()  # 初始化pro接口
            print("初始化pro接口成功")
            input_code = stock_code[key]
            sd, ed = "20181231", "20201231"  # 起始日期,结束日期
            print(f"抓取{key}股票数据")
            start = time.perf_counter()  # 开始时间
            df = Fetch_Data(input_code, sd, ed).web_spider()  # dataframe格式股票数据
            line_num = Sql_Data_Handle(df, Sql.connection, Sql.curs).add_data()
            end = time.perf_counter()  # 结束时间
            # 记录用时
            print(f"添加{key}股票数据到数据库--成功,用时{start - end}")
            # 记录添加的数据条数
            print(f"{key} 共{line_num}条数据已添加到数据库!")
        except Exception as e:
            print e
        count += 1
        print(f"还剩{line_count - count}支股票...")
    

    有需要股票代码和名称的私信我。

    有问题可以在评论区留言。如果喜欢这篇文章记得点赞哦!!!

    展开全文
  • 利用python编写了一个爬虫代码,爬取雅虎财经股票交易数据,可以更改URL,爬取其他网站数据
  • 【python爬虫】用python爬取股票数据

    千次阅读 2020-05-22 13:41:59
    这几天把学习通的 ...所以这篇文章以笔记的形式,记录一下另一种爬取股票数据的操作 需求分析 目标:获取上交所和深交所所有股票的名称和交易信息 输出:保存到文件中 技术路线:requests & re & panda

    这几天把学习通的 python 爬虫相关课程给刷完了,想去动手也实践一下,重温一下很久之前学过的东西

    然后发现实例2(爬淘宝那个)、实例3(爬股票那个),好像都有点问题。实例2是淘宝现在的反爬机制好像做的挺好,需要登录后才可以(当然也可能是我菜);实例3是百度的股票接口挂掉了。。
    在这里插入图片描述
    啊。。这。。
    所以这篇文章以笔记的形式,记录一下另一种爬取股票数据的操作

    需求分析

    • 目标:获取上交所和深交所所有股票的名称和交易信息
    • 输出:保存到文件中
    • 技术路线:requests & re & pandas & json

    候选数据网站的选择

    • 选取原则:股票信息静态存在于 HTML 页面中,非 js 代码生成,没有 Robots 协议限制
    • 获取股票列表:
      • 东方财富网:http://79.push2.eastmoney.com/api/qt/clist/get(链接可能有所变化,不能直接打开,需要传递参数,请看下问分解

    基本思路

    1. 打开 东方财富网行情中心
      在这里插入图片描述
      可以看到红色框框内有一堆股票数据,我们只需要找到这堆数据的返回接口即可(因为这个表格数据都是动态呈现的,如果使用 beautifulsoup4 直接做汤,表格内的数据都是 -),所以我们得去找数据接口
    2. F12 打开浏览器开发工具,找到 network 或者 网络
      在这里插入图片描述
      点击红色框框将当前网络请求记录清除,以便我们获取新的网络请求记录
    3. 点击网站表格下面的翻译,我们就会发现一条查询参数这么多的查询记录
      在这里插入图片描述
      点击预览我们就能看到与展示股票信息表格的对应信息的数据
      在这里插入图片描述
    4. 多翻几页表格,查看请求的参数变化,就能分析出请求参数有用的地方
      在这里插入图片描述
    5. 至此我们就可以根据标头查看我们所需的接口连接啦,每次打开这个连接可能前面的数字有所不同,但是都可有获取数据
      在这里插入图片描述
    6. 将全部请求的参数以字典的形式保存,然后在 requests.get() 的时候传递过去即可获得数据
    7. 使用 pandas 可以很方便的以 .csv 的格式导出数据文件到本地

    当然,你不想看上面的内容,或者觉得我说的不是很清楚,也可以直接看下面的实现代码

    实现代码

    首先引入相关的第三方库与定义全局变量

    import requests
    import re
    import json
    import pandas
    
    STOCK_LIST_URL = 'http://79.push2.eastmoney.com/api/qt/clist/get'
    
    HEADERS = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                      'like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.77',
        'Cookie': '你自己的 Cookie 信息'
    }
    
    #	这个查询参数可以直接复制,
    PARAMS = {
        'cb': 'jQuery112406209406051182_1590109022697',
        'pn': 1,  # 页码
        'pz': 200,  # 每页的大小
        'po': 1,
        'np': 1,
        'ut': 'bd1d9ddb04089700cf9c27f6f7426281',
        'fltt': 2,
        'invt': 2,
        'fid': 'f3',
        'fs': 'm:0 t:6,m:0 t:13,m:0 t:80,m:1 t:2,m:1 t:23',
        'fields': 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152',
        '_': '1590109022826'
    }
    

    然后定义一个获得 HTMLtext 的函数 getHTMLText()

    def getHTMLText(url, params):
        try:
            response = requests.get(url, headers=HEADERS, params=params)
            response.raise_for_status()
            response.encoding = response.apparent_encoding
            return response.text
        except:
            return ''
    

    接着定义一个函数 getStockList() 处理我们获得的返回字符串信息

    def getStockList(stockurl):
        html = getHTMLText(stockurl, PARAMS)
        if html == '':
            return print('获取 html 失败')
        #	找到相关数据并转换为字典的形式以方便得到数据列表
        stock_info_json = re.search(r'"diff":\[.*]', html).group(0)
        stock_info_dict = json.loads('{' + stock_info_json + '}')
        stock_info_list = stock_info_dict['diff']
        return stock_info_list
    

    最后定义一个函数 getStockInfo() 处理列表中没项数据并最终保存到本地文件

    def getStockInfo(stockinfolist, filepath):
        output_info_list = []
        list_len = 0
        for stock_info in stockinfolist:
            output_info = {}
            output_info['代码'] = stock_info['f12']
            output_info['名称'] = stock_info['f14']
            output_info['最新价'] = stock_info['f2']
            output_info['跌涨幅'] = stock_info['f3']
            output_info['跌涨额'] = stock_info['f4']
            output_info['成交量(手)'] = stock_info['f5']
            output_info['成交额'] = stock_info['f6']
            output_info['最高'] = stock_info['f15']
            output_info['最低'] = stock_info['f16']
            output_info['今开'] = stock_info['f17']
            output_info['昨收'] = stock_info['f18']
            list_len = list_len + 1
            print('\r当前进度:{:.2f}%'.format(list_len * 100 / len(stockinfolist)), end='')
            output_info_list.append(output_info)
        #   使用 pandas 库快速导出到csv
        pandas.DataFrame(output_info_list).to_csv(filepath, index=None)
    

    直接定义一个主函数 spider() 运行即可~

    def spider():
        output_file = 'demo.csv'
        stock_info_list = getStockList(STOCK_LIST_URL)
        getStockInfo(stock_info_list, output_file)
    
    
    if __name__ == '__main__':
        spider()
    

    实现效果

    在这里插入图片描述
    实现效果可能还是有点瑕疵,比如说股票的代码没有用0补全等,但大概能看~

    以上就是全部过程,可能其中代码还有些不是很人性化的地方,比如还不能自动翻页爬数据等,希望大家多多指教,下面贴出完整源代码

    import requests
    import re
    import json
    import pandas
    
    STOCK_LIST_URL = 'http://79.push2.eastmoney.com/api/qt/clist/get'
    
    HEADERS = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                      'like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.77',
        'Cookie': '你自己的 Cookie 信息'
    }
    
    PARAMS = {
        'cb': 'jQuery112406209406051182_1590109022697',
        'pn': 1,  # 页码
        'pz': 200,  # 每页的大小
        'po': 1,
        'np': 1,
        'ut': 'bd1d9ddb04089700cf9c27f6f7426281',
        'fltt': 2,
        'invt': 2,
        'fid': 'f3',
        'fs': 'm:0 t:6,m:0 t:13,m:0 t:80,m:1 t:2,m:1 t:23',
        'fields': 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152',
        '_': '1590109022826'
    }
    
    
    def getHTMLText(url, params):
        try:
            response = requests.get(url, headers=HEADERS, params=params)
            response.raise_for_status()
            response.encoding = response.apparent_encoding
            return response.text
        except:
            return ''
    
    
    def getStockList(stockurl):
        html = getHTMLText(stockurl, PARAMS)
        if html == '':
            return print('获取 html 失败')
        # stock_code_list = re.findall(r'"\d{6}"', html)
        stock_info_json = re.search(r'"diff":\[.*]', html).group(0)
        stock_info_dict = json.loads('{' + stock_info_json + '}')
        stock_info_list = stock_info_dict['diff']
        return stock_info_list
    
    
    def getStockInfo(stockinfolist, filepath):
        output_info_list = []
        list_len = 0
        for stock_info in stockinfolist:
            output_info = {}
            output_info['代码'] = stock_info['f12']
            output_info['名称'] = stock_info['f14']
            output_info['最新价'] = stock_info['f2']
            output_info['跌涨幅'] = stock_info['f3']
            output_info['跌涨额'] = stock_info['f4']
            output_info['成交量(手)'] = stock_info['f5']
            output_info['成交额'] = stock_info['f6']
            output_info['最高'] = stock_info['f15']
            output_info['最低'] = stock_info['f16']
            output_info['今开'] = stock_info['f17']
            output_info['昨收'] = stock_info['f18']
            list_len = list_len + 1
            print('\r当前进度:{:.2f}%'.format(list_len * 100 / len(stockinfolist)), end='')
            output_info_list.append(output_info)
        #   使用 pandas 库快速导出到csv
        pandas.DataFrame(output_info_list).to_csv(filepath, index=None)
    
    
    def spider():
        output_file = 'demo.csv'
        stock_info_list = getStockList(STOCK_LIST_URL)
        getStockInfo(stock_info_list, output_file)
    
    
    if __name__ == '__main__':
        spider()
    
    
    展开全文
  • 这篇文章主要介绍了基于Python爬取股票数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本环境配置 python 3.6 pycharm requests csv time...

    这篇文章主要介绍了基于Python爬取股票数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    基本环境配置

    • python 3.6
    • pycharm
    • requests
    • csv
    • time

    相关模块pip安装即可

    目标网页

    分析网页

    一切的一切都在图里

    找到数据了,直接请求网页,解析数据,保存数据

    请求网页

    import requests
    
    url = 'https://xueqiu.com/service/v5/stock/screener/quote/list'
    
    response = requests.get(url=url, params=params, headers=headers, cookies=cookies)
    
    html_data = response.json()

    解析数据

    data_list = html_data['data']['list']
    
    for i in data_list:
    
    dit = {}
    
    dit['股票代码'] = i['symbol']
    
    dit['股票名字'] = i['name']
    
    dit['当前价'] = i['current']
    
    dit['涨跌额'] = i['chg']
    
    dit['涨跌幅/%'] = i['percent']
    
    dit['年初至今/%'] = i['current_year_percent']
    
    dit['成交量'] = i['volume']
    
    dit['成交额'] = i['amount']
    
    dit['换手率/%'] = i['turnover_rate']
    
    dit['市盈率TTM'] = i['pe_ttm']
    
    dit['股息率/%'] = i['dividend_yield']
    
    dit['市值'] = i['market_capital']
    
    print(dit)

    保存数据 

    import csv
    
    f = open('股票数据.csv', mode='a', encoding='utf-8-sig', newline='')
    
    csv_writer = csv.DictWriter(f, fieldnames=['股票代码', '股票名字', '当前价', '涨跌额', '涨跌幅/%', '年初至今/%', '成交量', '成交额', '换手率/%', '市盈率TTM', '股息率/%', '市值'])
    
    csv_writer.writeheader()
    
    csv_writer.writerow(dit)
    
    f.close()

     我建立了一个Python学习圈子:1156465813。在彼此的沟通可以我们可以得到很多学习经验,积累知识,群内有2020最新的python学习资料,大家可以一起讨论问题,共同进步。

    展开全文
  • 前言 本文的文字及图片来源于网络,仅供学习、交流使用,不...找到数据了,直接请求网页,解析数据,保存数据 请求网页 import requests url = 'https://xueqiu.com/service/v5/stock/screener/quote/list' response = re
  • 最近我出了一本书,《基于股票数据分析的Python入门实战 视频教学版》,京东链接:https://item.jd.com/69241653952.html,在其中用股票范例讲述Python爬虫、数据分析和机器学习的技术,大家看了我的书,不仅能...
  • python爬取股票数据的一点小结

    千次阅读 2018-09-25 15:20:55
    网上对于爬取股票数据有相对完善的教程。不过大部分教程都是只能够爬取一段时间的股票数据,针对某一只股票的历史数据爬取,目前还没有看到比较好的教程。下面对近期学的东西进行一点点小结。 二、股票数据爬取网站...
  • 本文的文字及图片过滤网络,可以学习,交流使用,不具有任何...让你感受一下什么是一秒钟下载两千条数据。。 基本开发环境 Python 3.6 皮查姆 相关模块的使用 import csv import time import requests import c
  • 主要介绍了python 爬取疫情数据,,程序源码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • python爬取股票数据

    千次阅读 2017-12-14 11:30:14
    今天主要给大家介绍的是使用python爬取网易财经模块股票的历史数据.先来介绍一下环境: 1、版本:python2.7 2、使用beautisoup模块 以仙珺制药(股票代码:002332)为例,首先打开获取历史股票行情的网页,网页地址为:...
  • TuShare是实现对股票/期货等金融数据从**数据采集**、**清洗加工** 到 **数据存储**过程的工具
  • code=stock_new_sorted['股票代码'][0] stock_name=stock_new_sorted['名称'][0] index = stock_new_sorted['日期'] 通过读取csv文件出来的数据是没有经过处理的格式,需要进行转制然后存进列表中 index1 = np.array...
  • 前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。...找到数据了,直接请求网页,解析数据,保存数据 请求网页 import requests url = 'https://x
  • python股票分析】如何实时爬取股票行情数据
  • 使用python爬虫爬取历史数据,或者更确切的说,先爬取股票代码,然后使用pandas_datareader从yahoo上获取该股票的历史数据。该网站可以获取到所有上证股票的股票代码。借鉴蒹葭杰克兄弟的代码,对其代码稍作改进,以
  • 利用python爬取股票交易数据 分析网站 找到返回的url url = https://xueqiu.com/service/v5/stock/screener/quote/list?page={page}&size=30&order=desc&order_by=amount&exchange=CN&market=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,966
精华内容 1,586
关键字:

python爬取股票数据

python 订阅