本帖最后由 老嬴政 于 2020-6-6 08:12 编辑
目标:
爬取所有股票的的成交量和MA值并导出EXCEL
股票成交量和MA
思路:
先爬取所有股票的股票代码,因为每一个股票的网址格式差不多,都是https://xueqiu.com/S/股票代码
股票代码
在每一个股票页面右键开发者工具,点击network,再点击日K 一顿排查后会发现这个接口网址
json接口
symbol=SH688021&begin=1591247470066&period=day&type=before&count=-142&indicator=kline,pe,pb,ps,pcf,market_capital,agt,ggt,balance
https://stock.xueqiu.com/v5/stock/chart/kline.json?symbol=SH688021&begin=1591247470066&period=day&type=before&count=-142&indicator=kline,pe,pb,ps,pcf,market_capital,agt,ggt,balance
这个接口返回股票的一些基础数据,MA可以算平均值算出来,成交量里面也有。把数据存下来做一下数据处理就好了
实操部分:
这里使用urllib3库来爬取
[Asm] 纯文本查看 复制代码 import urllib3
http = urllib3.PoolManager()
先爬取所有的股票代码
在https://xueqiu.com/hq#exchange=CN&firstName=1&secondName=1_0用开发者工具的network选项卡,选中XHR,可以看到只有一条url,
爬取所有股票代码
可以看到一共有4388个股票,每页显示30条:
[Asm] 纯文本查看 复制代码 if (pageMax/30 > pageMax//30):
pageMax = (pageMax//30)+1
else:
pageMax = pageMax/30 这样就可以得到一共的页数
[Asm] 纯文本查看 复制代码
for x in range(1, pageMax):
allStockNumberListUrl = f"https://xueqiu.com/service/v5/stock/screener/quote/list?page={x}&size=30&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz&_=1589928406311"
stockList = http.request('GET', allStockNumberListUrl).data
for stockNumber in json.loads(stockList)['data']['list']:
print(stockNumber['symbol'])
print(stockNumber['volume'])
这样就可以打印出所有的股票代码和成交量,你可以选择存在列表里面或者文件里面都可以
当得到所有股票代码之后,就是和https://xueqiu.com/S/ 组合起来去访问每一个股票页面
[Asm] 纯文本查看 复制代码 for stockNumber in allStockNumberList:
getStockDataUrl = f"https://stock.xueqiu.com/v5/stock/chart/kline.json?symbol={stockNumber}&begin={timestamp}&period=day&type=before&count=-142&indicator=kline,pe,pb,ps,pcf,market_capital,agt,ggt,balance"
stockData = http.request('GET', getStockDataUrl, headers={
"Cookie": ""#这里用你自己的cookie
}) 获取到的数据是json数据,要转成字典
[Asm] 纯文本查看 复制代码 stockDataJson = json.loads(stockData.data)['data']['item']
然后用for循环遍历这个字典
[Asm] 纯文本查看 复制代码
if (len(stockDataJson) >= MAnumber):
for x in range(len(stockDataJson)-1, len(stockDataJson)-MAnumber-1, -1):
allStockCloseValue.write(str(stockDataJson[x][5])+" ")
else:
for y in range(len(stockDataJson)-1,-1,-1):
allStockCloseValue.write(str(stockDataJson[y][5])+" ") 这里的MAnumber意思是,如果你想要MA100,就是100天价格的平均值,这个for循环是倒序的,从最后一个一直循环到倒数第100天,如果MAnumber是100。 但是有些股票没有100条数据,没有100条数据的,就把全部的数据都获取。因为这个MAnumber是最大值。比如你想要MA10,MA20,MA30和MA100。 那你获取100条数据,就可以算10,20和30的了接下来就是把这些数据存进excel里面这里用一个叫 records 的库
records使用方法
我把使用方法放上来只要把数据整合好成一个数组夹字典就好了[Asm] 纯文本查看 复制代码 MAResult = round_up(sum(close[0:userMA])/len(close[0:userMA]))
def round_up(value):
return round(value * 100) / 100.0
userMA是你要显示出来的MAnumber,比如你想要显示MA10,那userMA就是10close是一个存所有收盘价的列表
楼楼的程序最终运行结果是这样的
运行结果
源码:注意:源码写的非常非常非常乱,完全没有注释,很多重复没意义的代码,时间复杂度非常高,大佬轻喷
StockSpider.7z
(4 KB, 下载次数: 204)
|