Board logo

标题: [己解决]50元求代码读取指定网页数据下载到文本 [打印本页]

作者: keshun    时间: 2020-6-13 19:02     标题: [己解决]50元求代码读取指定网页数据下载到文本

50元求代码读取指定网页数据下载到文本

具体报酬:50元人民币【己支付】。
支付方式:微信/支付宝等。
联系方式:QQ
有效期限:2020年6月20日之前。
需求描述:

https://www.okex.me/markets/spot-info/btc-usdt

win10运行代码输入日期20200401读取网页指定数据保存至文本a.txt如下:
MA7  6372.9
M30  6767.3
K  49.17
D  57.07
J  33.38
作者: wujunkai    时间: 2020-6-13 22:41

这个就算是Python,都有难度
坐等大神
作者: Gin_Q    时间: 2020-6-13 23:46

回复 2# wujunkai


    触及到知识盲区,这个太难了!
作者: codegay    时间: 2020-6-14 02:44

这个主要是需要先找对API是什么
https://www.okex.me/docs/zh/#README
之后从API读数据难度应该不算太高
作者: codegay    时间: 2020-6-14 02:45

https://www.okex.me/docs/zh/#index-restful-content
作者: went    时间: 2020-6-14 03:02

数据爬取不难,计算复杂
win10保存为bat,ANSI编码
  1. @powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause&exit
  2. #根据时间获取数据
  3. function Get-Data([datetime]$inputDateTime){
  4.     $d=$inputDateTime.AddDays(-1)
  5.     $utcStr='{0:0000}-{1:00}-{2:00}T16:00:00.000Z' -f $d.Year,$d.Month,$d.Day
  6.     return @('{0:0000}-{1:00}-{2:00} 00:00' -f $inputDateTime.Year,$inputDateTime.Month,$inputDateTime.Day)+(($Script:json.data -match $utcStr)[0] | Select-Object -Skip 1)
  7. }
  8. #批量获取前n天数据
  9. function Get-DataArray([datetime]$beginTime,$last){
  10.     $dataArray=[System.Collections.ArrayList]::new();
  11.     [void]$dataArray.Add((Get-Data -inputDateTime $beginTime))
  12.     for($i=1;$i -lt $last;$i++){
  13.         $inputDateTime=$inputDateTime.AddDays(-1)
  14.         [void]$dataArray.Add((Get-Data -inputDateTime $inputDateTime))
  15.     }
  16.     return $dataArray
  17. }
  18. #URL
  19. $url="https://www.okex.me/v2/spot/instruments/BTC-USDT/candles?granularity=86400&size=1000&t=1592064786686"
  20. $resp=Invoke-WebRequest -UseBasicParsing -Uri $url
  21. #获取JSON
  22. $Script:json=$resp.Content | ConvertFrom-Json
  23. #输入数据
  24. $input=(Read-Host "输入年月日(格式:20200614)").Trim()
  25. $inputDateTime=[System.DateTime]::ParseExact($input,"yyyyMMdd",[cultureinfo]::InstalledUICulture)
  26. #爬取数据
  27. #计算MA7
  28. $MA7=0;
  29. $datas=Get-DataArray -beginTime $inputDateTime -last 7
  30. $datas | foreach { $MA7+=$_[4] }
  31. $MA7=[System.Math]::Round($MA7/7,1)
  32. #计算MA30
  33. $MA30=0;
  34. $datas=Get-DataArray -beginTime $inputDateTime -last 30
  35. $datas | foreach { $MA30+=$_[4] }
  36. $MA30=[System.Math]::Round($MA30/30,1)
  37. 'MA7:  '+$MA7
  38. 'MA30: '+$MA30
  39. #计算KDJ
  40. #https://baike.baidu.com/item/KDJ%E6%8C%87%E6%A0%87/6328421?fr=aladdin
复制代码
KDJ没看懂是怎么计算的,明天再试试
链接在这儿,大家可以试试https://baike.baidu.com/item/KDJ%E6%8C%87%E6%A0%87/6328421?fr=aladdin
作者: ivor    时间: 2020-6-14 12:10

本帖最后由 ivor 于 2020-6-14 14:21 编辑

测试过数据完全准确
开始用的这个接口:https://www.okex.me/docs/zh/#spot-line,发现数据不正确, 后面发现原因日期有错位
后改用这个不算官方正规的接口:https://www.okex.me/v2/spot/inst ... amp;t=1592091928445


granularity=86400    时间粒度,86400日线
size=1000 最大k线数量,不能超过1000否则报错。
  1. #! /usr/bin/env python3
  2. # -*- coding: UTF-8 -*-
  3. import pandas as pd
  4. import requests
  5. import json
  6. import numpy as np
  7. import datetime
  8. api_url = "https://www.okex.me/v2/spot/instruments/BTC-USDT/candles?granularity=86400&size=1000&t=1592091928445"
  9. html = requests.get(api_url)
  10. stock_datas = pd.DataFrame()
  11. for i in json.loads(html.text)['data']:
  12.     date = (datetime.datetime.strptime(i[0].split('T')[0], "%Y-%m-%d") + datetime.timedelta(days=1)).strftime("%Y%m%d")
  13.     df_insert = pd.DataFrame(
  14.         {'date': date, 'open': i[1], 'high': i[2], 'low': i[3], 'close': np.float(i[4]), 'volume': i[5]}, index=[0])
  15.     stock_datas = stock_datas.append(df_insert)
  16. ma_list = [7, 30]  # ma移动平均
  17. for ma in ma_list:
  18.     stock_datas['MA_' + str(ma)] = np.round(pd.Series.rolling(stock_datas['close'], window=ma).mean(), 1)
  19. low_list = stock_datas['low'].rolling(9, min_periods=9).min()
  20. low_list.fillna(value=stock_datas['low'].expanding().min(), inplace=True)
  21. high_list = stock_datas['high'].rolling(9, min_periods=9).max()
  22. high_list.fillna(value=stock_datas['high'].expanding().max(), inplace=True)
  23. rsv = (stock_datas['close'] - low_list) / (high_list - low_list) * 100
  24. stock_datas['K'] = pd.Series.ewm(rsv, com=2).mean()
  25. stock_datas['D'] = pd.Series.ewm(stock_datas['K'], com=2).mean()
  26. stock_datas['J'] = 3 * stock_datas['K'] - 2 * stock_datas['D']
  27. custom_date = input("""
  28.     Example:20200401 2020年04月01日
  29.     Enter datetime please:"""
  30.                     )
  31. result = stock_datas[stock_datas['date'] == custom_date][['date', 'K', 'D', 'J', 'MA_7', 'MA_30']]
  32. if result.__len__() > 0:
  33.     result = "MA7:{}\r\nMA30:{}\r\nK:{}\r\nD:{}\r\nJ:{}\r\n".format(result['MA_7'].values[0], result['MA_30'].values[0],
  34.                                                                     np.round(result['K'].values[0], 2),
  35.                                                                     np.round(result['D'].values[0], 2),
  36.                                                                     np.round(result['J'].values[0], 2))
  37.     print(result)
  38.     with open('a.txt', 'w+') as f:
  39.         f.write(result)
  40. else:
  41.     print("Found nothing!!!")
复制代码
    Example:20200401 2020年04月01日
    Enter datetime please:20200401
MA7:6372.9
MA30:6767.3
K:49.17
D:57.07
J:33.38

作者: wujunkai    时间: 2020-6-14 12:12

回复 5# codegay


   居然还有api,好评
作者: went    时间: 2020-6-14 13:35

回复 7# ivor
厉害,我没看懂KDJ咋计算的
作者: ivor    时间: 2020-6-14 13:56

回复 9# went


    https://blog.csdn.net/weixin_414 ... earnPai2-1.nonecase

这儿说的比较详细。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2