老嬴政 发表于 2020-6-6 08:03

Python爬取某股票网站

本帖最后由 老嬴政 于 2020-6-6 08:12 编辑

目标:
爬取所有股票的的成交量和MA值并导出EXCEL


思路:
先爬取所有股票的股票代码,因为每一个股票的网址格式差不多,都是https://xueqiu.com/S/股票代码
在每一个股票页面右键开发者工具,点击network,再点击日K 一顿排查后会发现这个接口网址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库来爬取


import urllib3
http = urllib3.PoolManager()
先爬取所有的股票代码
在https://xueqiu.com/hq#exchange=CN&firstName=1&secondName=1_0用开发者工具的network选项卡,选中XHR,可以看到只有一条url, 可以看到一共有4388个股票,每页显示30条:

if (pageMax/30 > pageMax//30):
    pageMax = (pageMax//30)+1
else:
    pageMax = pageMax/30这样就可以得到一共的页数

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/ 组合起来去访问每一个股票页面

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数据,要转成字典

stockDataJson = json.loads(stockData.data)['data']['item']

然后用for循环遍历这个字典


if (len(stockDataJson) >= MAnumber):
    for x in range(len(stockDataJson)-1, len(stockDataJson)-MAnumber-1, -1):
         allStockCloseValue.write(str(stockDataJson)+" ")
else:
   for y in range(len(stockDataJson)-1,-1,-1):
         allStockCloseValue.write(str(stockDataJson)+" ")这里的MAnumber意思是,如果你想要MA100,就是100天价格的平均值,这个for循环是倒序的,从最后一个一直循环到倒数第100天,如果MAnumber是100。 但是有些股票没有100条数据,没有100条数据的,就把全部的数据都获取。因为这个MAnumber是最大值。比如你想要MA10,MA20,MA30和MA100。 那你获取100条数据,就可以算10,20和30的了接下来就是把这些数据存进excel里面这里用一个叫 records 的库我把使用方法放上来只要把数据整合好成一个数组夹字典就好了MAResult = round_up(sum(close)/len(close))
def round_up(value):
    return round(value * 100) / 100.0
userMA是你要显示出来的MAnumber,比如你想要显示MA10,那userMA就是10close是一个存所有收盘价的列表
楼楼的程序最终运行结果是这样的源码:注意:源码写的非常非常非常乱,完全没有注释,很多重复没意义的代码,时间复杂度非常高,大佬轻喷

老嬴政 发表于 2020-6-6 12:11

40aaa 发表于 2020-6-6 10:37
我就想问问这个时间是多久的?之前有个股票相关的是一个月之前的数据,根本不管啥用

运行一次就会爬取最新的数据

pj2233++ 发表于 2020-7-18 15:06

python和股市小白{:1_909:} 我最近就在想,如何监控所有股票,当达到一个标准以后能够提出预警,这样就能大大增加选股的效率,很幸运看到这个帖子

yu7676 发表于 2020-6-6 08:44

楼主,具体怎么用啊

pdc9911 发表于 2020-6-6 08:45

朕已阅。

aqwaqw 发表于 2020-6-6 08:57

朕已阅。

处女-大龙猫 发表于 2020-6-6 09:02

大神, 评分学习

yjn866y 发表于 2020-6-6 09:14

过来看看,,谢谢分享

飘浮 发表于 2020-6-6 09:20

看起来还不错。。

youjinglanling 发表于 2020-6-6 09:20

学习了,有用

会唱歌的鬼 发表于 2020-6-6 09:48

学习思想

40aaa 发表于 2020-6-6 10:37

我就想问问这个时间是多久的?之前有个股票相关的是一个月之前的数据,根本不管啥用
页: [1] 2 3 4 5 6
查看完整版本: Python爬取某股票网站