精华内容
下载资源
问答
  • 同花顺行情软件的数据文件读取器和支持类库DLL,支持查看day文件
  • C#读取股票日线数据同花顺版),先要下载同花顺软件,然后再下载本地数据
  • 股票查询、股票价格实时查询股票查询、股票价格实时查询股票查询、股票价格实时查询股票查询、股票价格实时查询
  • 使用Python抓取同花顺资金流数据

    千次阅读 2020-02-16 10:28:06
    今天我们通过一个例子来介绍python爬取数据的一般步骤,用到的工具包括python的经典模块requests和BeautifulSoup,另外结合刚学习的任务流工具TaskFlow来完成代码开发。 我们先来看一下要爬取的数据,网址是...

    今天我们通过一个例子来介绍python爬取数据的一般步骤,用到的工具包括python的经典模块requests和BeautifulSoup,另外结合刚学习的任务流工具TaskFlow来完成代码开发。

    我们先来看一下要爬取的数据,网址是http://data.10jqka.com.cn/funds/gnzjl/,通过chrome的开发者工具分析我们可以比较容易找到后台数据加载网址为

    http://data.10jqka.com.cn/funds/gnzjl/field/tradezdf/order/desc/page/{page_num}/ajax/1/free/1/

    其中page_num的位置为要查询第几页的数据,在网页上看到概念一共有6页数据,所以page_num取值为1-6
    在这里插入图片描述
    这里有个小技巧,可以先点击图片左上角的清空按钮,把已经加载的网址先清理掉,然后在原始网页上点第二页,就能看到图片左下角新加载的网址,点开右边“Preview” 看到资金流数据相关的内容,就能确定这个网址是用来加载数据的。

    在chrome浏览器中输入 http://data.10jqka.com.cn/funds/gnzjl/field/tradezdf/order/desc/page/1/ajax/1/free/1/,并打开chrome开发者工具,在网页源码中找到数据所在table标签为

    <table class="m-table J-ajax-table">
    	...
    </table>
    

    抓取数据的完整源码如下

    import time
    
    import requests
    from bs4 import BeautifulSoup
    from taskflow import engines
    from taskflow.patterns import linear_flow
    from taskflow.task import Task
    
    REQUEST_HEADER = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
    
    
    class MoneyFlowDownload(Task):
        """
        下载资金流数据
        数据源地址:http://data.10jqka.com.cn/funds/gnzjl/
    
        """
        BASE_URl = {
            "concept": 'http://data.10jqka.com.cn/funds/gnzjl/field/tradezdf/order/desc/page/%s/ajax/1/free/1/',
        }
    
        def execute(self, bizdate, *args, **kwargs):
    
            for name, base_url in self.BASE_URl.items():
                # 爬取数据的存储路径
                dt_path = '/data/%s_%s.csv' % (bizdate, name)
    
                with open(dt_path, "a+") as f:
                    # 记录数据文件的当前位置
                    pos = f.tell()
                    f.seek(0)
                    lines = f.readlines()
                    # 读取文件中的全部数据并将第一列存储下来作为去重依据,防止爬虫意外中断后重启程序时,重复写入相同
                    crawled_list = list(map(lambda line: line.split(",")[0], lines))
                    f.seek(pos)
                    # 循环500次,从第一页开始爬取数据,当页面没有数据时终端退出循环
                    for i in range(1, 500):
                        print("start crawl %s, %s" % (name, base_url % i))
                        web_source = requests.get(base_url % i, headers=REQUEST_HEADER)
                        soup = BeautifulSoup(web_source.content.decode("gbk"), 'lxml')
                        table = soup.select('.J-ajax-table')[0]
                        tbody = table.select('tbody tr')
                        # 当tbody为空时,则说明当前页已经没有数据了,此时终止循环
                        if len(tbody) == 0:
                            break
                        for tr in tbody:
                            fields = tr.select('td')
                            # 将每行记录第一列去掉,第一列为序号,没有存储必要
                            record = [field.text.strip() for field in fields[1:]]
                            # 如果记录还没有写入文件中,则执行写入操作,否则跳过这行写入
                            if record[0] not in crawled_list:
                                f.writelines([','.join(record) + '\n'])
                        # 同花顺网站有反爬虫的机制,爬取速度过快很可能被封
                        time.sleep(1)
    
    
    if __name__ == '__main__':
        bizdate = '20200214'
        tasks = [
            MoneyFlowDownload('moneyflow data download')
        ]
        flow = linear_flow.Flow('ths data download').add(*tasks)
        e = engines.load(flow, store={'bizdate': bizdate})
        e.run()
    
    

    执行程序后,在dt_path位置已经存储了概念的资金流数据,文件名为20200214_concept.csv,内容大致如下:

    钛白粉,1008.88,6.29%,7.68,6.21,1.47,7,金浦钛业,10.04%,2.96
    磷化工,916.833,2.42%,37.53,34.78,2.75,28,六国化工,9.97%,4.08
    光刻胶,1435.68,2.40%,43.51,44.31,-0.80,20,晶瑞股份,10.01%,42.99
    

    此时就完成了同花顺概念分类的资金流数据的爬取,之后可以每天定时启动任务抓取数据进行分析。

    展开全文
  • 前言 数据是进行量化交易的基础和关键,目前国内做量化...文本讲述一种更经济便捷的方式来获取数据,即通过同花顺交易软件来导出股票数据,并且将数据转换为DataFrame 表格型的数据结构,以csv的格式存储,便于后...

    前言

    数据是进行量化交易的基础和关键,目前国内做量化产品的金融机构大部分是从券商获取高频实时行情数据的,另外很多金融网站也提供了数据接口,可以调用接口方式获取,也可以用爬虫的方式获取。文本讲述一种更经济便捷的方式来获取数据,即通过同花顺交易软件来导出股票数据,并且将数据转换为DataFrame 表格型的数据结构,以csv的格式存储,便于后续进行量化交易分析。


    同花顺交易数据导出

    1.打开同花顺软件,点击“分析”栏,选择“历史成交”,此时会出现股票的日线交易数据。
    图片描述
    图片描述

    2.点击“右键”,选择“数据导出”—>“导出所有数据”,选择导出的类型为Excel,执行下一步直到完成,即得到了2004年至今的该股交易数据。
    图片描述

    3.打开EXCEL文档已经可以查看到导出的数据了,不过在量化领域中最常用使用的是CSV格式,这里将EXCEL另存为CSV格式。CSV文件是一种文本文件,用记事本就能打开。文件的数据列以半角逗号分隔,每一行数据都以回车符结束。它可以非常容易地被导入各种PC表格及数据库中。将EXCEL另存为CSV格式时,CSV文件将EXCEL工作表中的单元格所显示的文本和数值以逗号分离进行保存。

    图片描述
    图片描述
    注:如果单元格中包含逗号,则该单元格中的内容以双引号引起。


    转换为DataFrame格式

    在Python中,pandas是数据处理方面功能最为强大的扩展模块了,包含了高级的数据结构Series和DataFrame,使得在Python中处理数据变得非常方便、快速和简单,后续我们在应用中会深有体会。

    方法1:通过pandas模块自带的read_csv函数可直接得到DataFrame格式数据,注意编码格式为“GB2132”,否则控制台会将中文解析为乱码。

     df_csvload = pd.read_csv('C:\programPY\CSV_RWdata_ForNewFile\DataChange.csv',parse_dates=True,index_col=0,encoding='gb2312')

    图片描述

    方法2:此处使用CSV模块的DictReader函数读取CSV文件,DictReader函数以字典形式返回,字典的键则是这个单元格的标题(即列头),每一个单元格内容放在字典的值内。DataFrame的创建方式有numpy二维数组、列表、Series序列以及字典方式等,此处DictReader函数返回的字典形式数据可直接创建,字典中的keys就是DataFrame里面的columns,但是没有index的值,默认是从零开始计数。

    f=codecs.open('C:\programPY\CSV_RWdata_ForNewFile\DataChange.csv','rb','gb2312')#GB2312编码
    reader = csv.DictReader(f)
    rows = [row for row in reader]
    df = pd.DataFrame(rows)
    f.close()
    

    图片描述

    该方法需要增加额外的处理,将“时间”列作为index索引,同时将日期信息去除星期几

    df.rename(columns={ "时间":'time' },inplace=True)#替换为英文columns         
    
    for index,colstr in enumerate(df['time']):
        colstr = colstr.split(',',1)#去除日期中的星期几
        df.loc[index, 'time'] = colstr[0]
    df.index = df['time'].tolist()#time作为index
    del df['time']#数据中删除time列
    

    图片描述


    数据保存

    数据处理后使用pandas模块自带的to_csv可将数据直接存储为CSV。

    df.to_csv('C:\programPY\CSV_RWdata_ForNewFile\DataCheck.csv',columns=df.columns,index=True)
    

    图片描述

    更多python量化交易内容互动请加微信公众号:PythonQT-YuanXiao
    展开全文
  • 同花顺日线数据文件读取器

    热门讨论 2015-07-25 22:29:55
    同花顺日线数据文件读取器,通过读取同花顺历史数据文件获取,适合盘后分析
  • 我们发现这个网站的结果不需要Cookie值也是可以正常获取的。当然这不是我们要的结果,因为我们需要对v参数进行解决,主要是练习自己的JS逆向水平啊! v值解决 通过下图可以看出这个JS文件就是加密生成v参数的了,...

    前言

    没啥可说的,直接上结果,你们要是有啥不会就看我的其他的文章,里面有基础的断点操作等等。

    QQ群聊

    855262907

    结果获取

    我们发现这个网站的结果不需要Cookie值也是可以正常获取的。当然这不是我们要的结果,因为我们需要对v参数进行解决,主要是练习自己的JS逆向水平啊!
    在这里插入图片描述

    在这里插入图片描述

    v值解决

    通过下图可以看出这个JS文件就是加密生成v参数的了,里面的具体解决步骤就不放出来了,平台不允许我放出来,具体可以加群进行交流。
    在这里插入图片描述

    v值生成图片

    里面有很多环境检测的东西,比如document,window,navigator,location,这些里面还检测了具体的值哦!
    在这里插入图片描述

    声明:本文仅供学习交流使用,请勿用于商业用途,违者后果自负。

    展开全文
  • 使用SqlServer读取同花顺数据
  • --html数据获取--> <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.35.0</version>

    直接上代码(亲测可用)

    maven 先引入包

    <!--html数据获取-->
            <dependency>
                <groupId>net.sourceforge.htmlunit</groupId>
                <artifactId>htmlunit</artifactId>
                <version>2.35.0</version>
            </dependency>
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.8.3</version>
            </dependency>
           <!-- lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <scope>provided</scope>
                <lombok.version>1.18.12</lombok.version>
            </dependency>

    实体类(lombok写的)

    package com.tonghuashun.entity;
    
    import com.baomidou.mybatisplus.annotation.TableName;
    import com.baomidou.mybatisplus.annotation.IdType;
    import java.util.Date;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableField;
    import java.io.Serializable;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    
    /**
     * @since 2021-02-04
     */
    @Data
    @EqualsAndHashCode(callSuper = false)
    @TableName("MyStock")
    @ApiModel(value="MyStock对象", description="")
    public class MyStock implements Serializable {
    
        private static final long serialVersionUID=1L;
    
        @TableId(value = "sysNo", type = IdType.AUTO)
        private Integer sysNo;
    
        @TableField("code")
        private String code;
    
        @TableField("name")
        private String name;
    
        @TableField("newPrice")
        private Double newPrice;
    
        @TableField("changepercent")
        private Double changepercent;
    
        @TableField("upsAndDowns")
        private Double upsAndDowns;
    
        @TableField("higherSpeed")
        private Double higherSpeed;
    
        @TableField("changeHands")
        private Double changeHands;
    
        @TableField("quantityRelativeRatio")
        private Double quantityRelativeRatio;
    
        @TableField("amplitude")
        private Double amplitude;
    
        @TableField("volumeOfTransaction")
        private String volumeOfTransaction;
    
        @TableField("circulationStock")
        private String circulationStock;
    
        @TableField("circulationMarketValue")
        private String circulationMarketValue;
    
        @TableField("pe")
        private Double pe;
    
        @TableField("getDate")
        private Date getDate;
    
    
    }
    

    sqlserver数据库 表结构

    CREATE TABLE [dbo].[MyStock] (
    [sysNo] int NOT NULL IDENTITY(1,1) NOT FOR REPLICATION ,
    [code] nvarchar(20) COLLATE Chinese_PRC_CI_AS NULL ,
    [name] nvarchar(20) COLLATE Chinese_PRC_CI_AS NULL ,
    [newPrice] decimal(20,6) NULL ,
    [changepercent] decimal(20,6) NULL ,
    [upsAndDowns] decimal(20,6) NULL ,
    [higherSpeed] decimal(20,6) NULL ,
    [changeHands] decimal(20,6) NULL ,
    [quantityRelativeRatio] decimal(20,6) NULL ,
    [amplitude] decimal(20,6) NULL ,
    [volumeOfTransaction] nvarchar(20) COLLATE Chinese_PRC_CI_AS NULL ,
    [circulationStock] nvarchar(20) COLLATE Chinese_PRC_CI_AS NULL ,
    [circulationMarketValue] nvarchar(20) COLLATE Chinese_PRC_CI_AS NULL ,
    [pe] decimal(20,6) NULL ,
    [getDate] datetime NULL ,
    CONSTRAINT [PK_MyStock] PRIMARY KEY ([sysNo]) WITH (FILLFACTOR=90)
    )
    ON [PRIMARY]
    GO
    
    DBCC CHECKIDENT(N'[dbo].[MyStock]', RESEED, 8479)
    GO

     

    重点来了

    package com.tongHuaShun.controller;
    
    import com.gargoylesoftware.htmlunit.HttpMethod;
    import com.gargoylesoftware.htmlunit.Page;
    import com.gargoylesoftware.htmlunit.WebClient;
    import com.gargoylesoftware.htmlunit.WebRequest;
    import com.sintang.mingteng.common.entity.CommonResult;
    import com.sintang.mingteng.entity.MyStock;
    import com.sintang.mingteng.service.MyStockService;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.net.URL;
    import java.util.*;
    
    @RestController
    @RequestMapping("/tongHuaShun/myStock")
    public class TonghuaShunController {
        WebClient webClient;
    
        @Autowired(required = false)
        public MyStockService myStockService;//自己数据库的service
    
        //获取某个url的web客户端
        public String htmlUnitUrl(String url, WebClient webClient) {
            try {
                WebRequest request = new WebRequest(new URL(url), HttpMethod.GET);
                Map<String, String> additionalHeaders = new HashMap<String, String>();
                additionalHeaders.put("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36");
                additionalHeaders.put("Accept-Language", "zh-CN,zh;q=0.8");
                additionalHeaders.put("Accept", "*/*");
                request.setAdditionalHeaders(additionalHeaders);
                // 获取某网站页面
                Page page = webClient.getPage(request);
                return page.getWebResponse().getContentAsString();
            } catch (Exception e) {
    
            }
            return null;
        }
    
        @PostMapping(value = "/setStock",produces = MediaType.APPLICATION_JSON_VALUE)
        public CommonResult setStock(Integer newNum){
            //String url = "http://q.10jqka.com.cn/";
            //demo.work(url);
            try {
                int pageCount = 206;
                for(int i= newNum;i<=pageCount;i++) {
                    //当访问速度过快时,后台浏览器会禁止,在这里可加入适当延迟的代码
                    Thread.sleep(3000);
                    String content = htmlUnitUrl("http://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/"+i+"/ajax/1/",webClient);
                    Document doc = Jsoup.parse(content);
                    Elements trs = doc.select("table").select("tr");
                    if(trs.size()==0){
                        setStock(i);//递归防止同花顺反扒机制
                    }
                    List<MyStock> list = new ArrayList<>();
                    //strs一页的条数
                    trs.remove(0);
                    for(int k = 0; k<trs.size(); k++){
                        MyStock stock = new MyStock();
                        Elements tds = trs.get(k).select("td");
                        for(int j = 0;j<tds.size();j++){
                            String text = tds.get(j).text();
                            if("--".equals(text)){
                                text = "0.00";
                            }else if("亏损".equals(text)){
                                text = "-111111";
                            }
                            if(j == 1){
                                stock.setCode(text);
                            }else if(j == 2){
                                stock.setName(text);
                            }else if(j == 3){
                                stock.setNewPrice(Double.valueOf(text));
                            }else if(j == 4){
                                stock.setChangepercent(Double.valueOf(text));
                            }else if(j == 5){
                                stock.setUpsAndDowns(Double.valueOf(text));
                            }else if(j == 6){
                                stock.setHigherSpeed(Double.valueOf(text));
                            }else if(j == 7){
                                stock.setChangeHands(Double.valueOf(text));
                            }else if(j == 8){
                                stock.setQuantityRelativeRatio(Double.valueOf(text));
                            }else if(j == 9){
                                stock.setAmplitude(Double.valueOf(text));
                            }else if(j == 10){
                                stock.setVolumeOfTransaction(text);
                            }else if(j == 11){
                                stock.setCirculationStock(text);
                            }else if(j == 12){
                                stock.setCirculationMarketValue(text);
                            }else if(j == 13){
                                stock.setPe(Double.valueOf(text));
                            }else if(j == 14){
                                stock.setGetDate(new Date());
                            }
                            //System.out.println(text);
                        }
                        if(stock.getChangepercent()>0){//当日红的股票
                            list.add(stock);
                        }else{
                            break;
                        }
                    }
                    if(list.size()>0){
                        for (int m = 0; m < list.size(); m++) {
                            myStockService.save(list.get(m));
                        }
                    }else{
                        break;
                    }
                }
    
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
            return CommonResult.ok();
        }
    }
    

    POSTMAN调用就行了

     

     

     

     

     

     

     

     

     

     

     
    展开全文
  • 转自微信公众号-----数据观察 沪、深证券交易所自1990年成立以来,已伴随中国经济发展将近30年了。在这将近30年里,沪、深股市起起落落...为进一步了解沪深股市目前现状,这里使用python来爬取同花顺网上所有沪深上...
  • 每日股票公告信息,一览无遗,同花顺数据,利好公告信息
  • 本例通过python 外挂实现了A股交易下单,测试支持目前最新版的同花顺下单,目前写的比较粗糙,供给各位共同学习。在使用前请设置客户端,网上股票交易系统——系统设置——快速交易,设置所有操作均不需要确认,...
  • 最近试图从财经网站上积累数据,选中了同花顺财经的数据中心的数据。 插一句话,个人认为同花顺可能是目前财经领域掌握着最先进的机器学习技巧与人工智能算法的网站了。我自己最近也在做金融领域的问答与对话系统,...
  • 同花顺导出股票数据 进入个股K线图界面 菜单栏: 分析>历史成交 右键>数据导出>导出所有数据 选择路径>下一步>完成
  • Python网络爬虫数据采集实战:同花顺动态网页爬取

    千次阅读 多人点赞 2020-03-09 12:42:31
    之后对源代码进行信息提取进而存储即可,本文则针对动态网页进行数据采集,首先介绍Ajax相关理论,之后实战爬取同花顺动态网页,获取个股相关信息。 目录 一、Ajax理论 1.Ajax简介 2.Ajax分析 3.Ajax提取 二...
  • 使用htmlUnit抓取同花顺股票数据

    千次阅读 2019-06-15 16:53:14
    网站地址 http://q.10jqka.com.cn/ 请求地址 ... 其中的 page/4 就是页码 访问网站 抓取每一页的股票数据 private String crawler(String url) { ...
  • 关于同花顺数据格式

    千次阅读 2019-07-14 22:17:32
    同花顺是很多传统软件中比较成熟的先进的,至少他目前用以开发程序的平台跟上了软件开发的前沿,尽管它存在着一些不稳定,但同花顺绝对是最具有生命力的,所以大家了解他的格式以后运用也有个稳定的数据来源,同花顺的...
  • [AHK]获取同花顺软件中的持仓信息

    千次阅读 2016-12-08 20:37:57
    关键代码就一句,先摆在前面了,感谢AutoHotkey福利, 脚本说明:按F11键发送消息57634到控件CVirtualGridCtrl2,获取持仓到剪贴板,接着用msgbox显示剪贴... SendMessage,0x111,57634,0,CVirtualGridCtrl2,同花顺 ...
  • 尝试爬取,目前只提取了一部分数据。在数据存储上还是有问题,还未体现Python的间接性质。如果你有好的建议请留言或私信,谢谢。 下面的程序仅做参考,如果有时间再优化吧。 # -- coding: utf-8 -*- """ Created ...
  • 前文的爬虫都建立在静态网页基础之上,首先通过请求网站url获取到网页源代码。之后对源代码进行信息提取进而存储即可,本文则针对动态网页进行数据采集...
  • 据公司情报专家《财经涂鸦》消息,3月1日晚间,同花顺发布了其2020年年报,得益于2020年国内证券市场交投活跃,以及投资者对金融信息服务、基金投资需求增大,业绩较上年同期呈猛增态势:实现营收28.44亿元,同比...
  • 同花顺手机炒股的理念为让你更加快速、安全、轻松、便捷地进行投资,让你享受最为专业、最为及时、最为全面的数据信息服务。3G版除了行情走势、股票排行、委托交易、基金行情、全球市场、精品资讯、专家论股等常用...
  • 而麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。...
  • 支持通用的同花顺客户端模拟操作 实现自动登录 支持通过webserver远程操作客户端 支持命令行调用,方便其他语言适应 基于Python3.6,Win。注:Linux仅支持雪球 微信群以及公众号 欢迎大家扫码关注公众号“食灯鬼”,...
  • # 导入库 import time import json import random import requests import pandas as pd from bs4 import BeautifulSoup import openpyxl # 获取单页数据 def get_html(page_id): headers = { 'host':'q.10jqka....
  • '''这是主文件所调用的获取基金公司财报相关数据的细节页面''' #获取细节信息并写入到excel多个sheet表中 import requests import bs4 from bs4 import BeautifulSoup from openpyxl import Workbook ...
  • 准备工作: ... open_file("同花顺利好公告.txt", driver, "利好公告") open_file("同花顺利空公告.txt", driver, "利空公告") 最后:希望有更简单方法爬取数据的大佬可以把方法告诉我,本人定虚心请教。
  • 截止2019年年底我国股票投资者数量为15975.24万户, 如此多的股民热衷于炒股,首先抛开炒股技术不说, 那么多股票数据是不是非常难找, 找到之后是不是看着密密麻麻的数据是不是头都大了? 今天带大家爬取雪球平台的股票...
  • 常用得测试工具都有哪些,jira的插件; 功能入口两行,每行5个,最多十个,后台...如何获取元素; 接口测试安全方面、性能; 技术架构:容器、postman; 测试中遇到的难点; 测试工作中的职责; Linux删除文..

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,797
精华内容 2,718
关键字:

获取同花顺数据