如何在大智慧中到处股票的数据如何用爬虫抓取股市?用python爬虫爬取股票数据

前言:编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中系统环境:64位win10系统,64位pyt......

如何在大智慧中到处股票的数据如何用爬虫抓取股市

人生苦短,我用 Python如果我的文章对您有帮助,请关注支持下作者的公众号:极客挖掘机,您的关注,是对小编坚持原创的最大鼓励:)前文传送门:小白学 Python 爬虫(1):开篇......接下来具体说说用python爬虫爬取股票数据

如何抓取股票信息?python爬虫实战教程

前言

基金持仓的股票,是有参考价值的。虽然基金公司都在每个季度结束后才公布持仓信息,从当前来看是有滞后性的。

但是,机构选择的股票仍然值得我们学习和参考。

如何在大智慧中到处股票的数据如何用爬虫抓取股市?用python爬虫爬取股票数据

机构的股票,是不会随意买卖的。一般都是经过严格、科学的数据分析及市场调研后,才决定是否买入。专业度,是个人投资者无法比拟的。

如何在大智慧中到处股票的数据如何用爬虫抓取股市?用python爬虫爬取股票数据

因此,作者通过网络公开的数据中, 1251家股票型基金前十大持仓股票进行整理后,对其持仓兴趣和重仓兴趣最突出的股票进行统计分析

股票型基金持仓数据抓取!

作者通过某大型财经网站,通过Python爬虫对 股票型基金 持仓数据进行抓取,仓位占比排行前10的股票。且持仓数据只有截至今年2020.3.31的数据。

如何在大智慧中到处股票的数据如何用爬虫抓取股市?用python爬虫爬取股票数据

接下来,作者将数据的抓取过程分享给大家。下面是具体步骤!

1. 导入对应包和设置随机请求头 。还好这个网站反爬不严重,不用考虑代理。

代码:

如何在大智慧中到处股票的数据如何用爬虫抓取股市?用python爬虫爬取股票数据

2. 获取股票型基金的基金代码

由于网站限制访问,不能通过发送请求的模式进行获取。所以作者直接从网站的js文件中直接将其所有数据复制下来,手动切割出基金代码。

如何在大智慧中到处股票的数据如何用爬虫抓取股市?用python爬虫爬取股票数据

代码:

Run:

{'博时军工主题股票': '004698', '华夏创成长ETF联接A': '007474', '华夏创成长ETF联接C': '007475', '招商国证生物医药指数分级': '161726',,,}

3.利用基金代码填入基金详情的网址内。 抓取单个基金的名称、持仓占比前10的股票名称

url = 'http://fund.eastmoney.com/{}.html'.format(range_value)

代码:

1)获取所有基金持仓的股票名称,以及基金名称和对应持仓的字典。

2)统计同一股票被基金持有及重仓持有的机构数量。并存入两个列表中,在下一个方法中会进行可视化。

Run:

小结。

上述主要给大家分享从网站抓取数据的话整个过程。接下来作者将利用抓取下来的数据进行统计分析。

数据统计分析

数据抓取下来后,我们就可以对所获取到的数据提取出有价值的内容。而作者就很想看看,这些1千多只股票型基金中, 持有相同的 重仓持有相同 某只股票的基金到底有多少只。

所以,接下来作者将从这两个方面去统计它。

1.超100只基金共同持有的股票 。这些股票都是基金仓位中占前10的股票。

作者只统计超100只基金共同持有的股票,也就是只要大于等于100只基金持有某只股票那么我都会统计出来。

如下图所示:

通过统计发现:

  • “贵州茅台” 仍然是 最受基金公司欢迎的股票 ,近 300只基金 持有该股票。
  • 其次,是 恒瑞医药 ”、“ 中国平安 ”、“ XD业银行 ”、“ 招商银行

作者查看贵州茅台的股价观察后,有这么多基金持有“贵州茅台”,还是有它的道理的。

1)贵州茅台。

2)恒瑞医药。

贵州茅台 ” 和 “ 恒瑞医药 ” 从今年3.20号至今一直保持着非常强的“势头”,无论是从价值、还是从技术上该股票都是比较优质的投资标的。

说明大部分的基金,都喜欢强势股。这很可能与 动量因子 有关!

2.基金“重仓持有”的股票 。这些股票是基金持仓中 仓位占比最大 的股票。

作者统计了20只及以上的基金重仓持有的股票。

通过统计有发现:

  • 贵州茅台 ”、“ 恒瑞医药 ”,仍然是 基金重仓 的标的。超过70只基金“重仓”持有!
  • 其次, 长春高新、立讯精密、招商银行

这些股票都是在2020.3.31号以前,基金公司的持仓中的。如果持有到现在,收益是相当可观的!

1)长春高新。

2)立讯精密。

3)招商银行。

小结。

由此可见,今年3月份以前基金大部分的仓位都放在了 贵州茅台 以及 恒瑞医药 这两只股票。另外,中国平安,也被大量的基金所持有!

最后

基金持有的股票,一般来说都是相对可靠的,本文仅仅是通过数据统计来分析1251只股票型基金持仓特征。

主要分为两个统计标准,靠前个是被 大量的基金所持有 ,另一个是被 基金重仓持有 的股票。 最终的结果发现,贵州茅台是这千多支基金中持仓机构较多、持仓占比最大的股票。

用python爬虫爬取股票数据

前言:

编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中

系统环境:

64位win10系统,64位python3.6,IDE位pycharm

预备知识:

BeautifulSoup的基本知识,re正则表达式的基本知识

代码:

代码解释:

靠前个getHTMLText函数的作用是获得所需的网页源代码

第二个getStockList函数的作用是获得东方财富网上面上海股票的全部代码,查看网页源代码可知,股票代码的数据放在'a'标签里面,如下图所示:

因此,首先用find_all方法遍历所有'a'标签,然后在'a'标签里面提取出href部分信息,在提取出来的href信息里面,用正则表达式匹配所需的信息,“sh\d{6}”,即徐亚匹配例如sh200010的信息

第三个函数需要根据第二个函数得到的股票代码,拼接出一个url,在这个特定的url的网页里,使用靠前个函数解析网页,首先加一个判断,如果遇到html为空,那么要继续执行下去,同样,我们也需要再加一个判断(关键之处),遇到网页不存在,

但html源代码仍然是存在的,因此接下去这个命令

stockInfo = soup.find('div',attrs = {'class':'stock-bets'})

可能为空,如果不加判断,程序执行到这里就会报错而无法继续执行,因此添加:

if stockInfo == None:

小白学 Python 爬虫(25):爬取股票信息

人生苦短,我用 Python

如果我的文章对您有帮助,请关注支持下作者的公众号:极客挖掘机,您的关注,是对小编坚持原创的最大鼓励:)

前文传送门:

小白学 Python 爬虫(1):开篇

小白学 Python 爬虫(2):前置准备(一)基本类库的安装

小白学 Python 爬虫(3):前置准备(二)Linux基础入门

小白学 Python 爬虫(4):前置准备(三)Docker基础入门

小白学 Python 爬虫(5):前置准备(四)数据库基础

小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装

小白学 Python 爬虫(7):HTTP 基础

小白学 Python 爬虫(8):网页基础

小白学 Python 爬虫(9):爬虫基础

小白学 Python 爬虫(10):Session 和 Cookies

小白学 Python 爬虫(11):urllib 基础使用(一)

小白学 Python 爬虫(12):urllib 基础使用(二)

小白学 Python 爬虫(13):urllib 基础使用(三)

小白学 Python 爬虫(14):urllib 基础使用(四)

小白学 Python 爬虫(15):urllib 基础使用(五)

小白学 Python 爬虫(16):urllib 实战之爬取妹子图

小白学 Python 爬虫(17):Requests 基础使用

小白学 Python 爬虫(18):Requests 进阶操作

小白学 Python 爬虫(19):Xpath 基操

小白学 Python 爬虫(20):Xpath 进阶

小白学 Python 爬虫(21):解析库 Beautiful Soup(上)

小白学 Python 爬虫(22):解析库 Beautiful Soup(下)

小白学 Python 爬虫(23):解析库 pyquery 入门

小白学 Python 爬虫(24):2019 豆瓣电影排行

引言

上一篇的实战写到最后没有用到页面元素解析,感觉有点小遗憾,不过最后的电影列表还是挺香的,真的推荐一看。

本次选题是先写好代码再写的文章,绝对可以用到页面元素解析,并且还需要对网站的数据加载有一定的分析,才能得到最终的数据,并且小编找的这两个数据源无 ip 访问限制,质量有保证,绝对是小白练手的绝佳之选。

郑重声明: 本文仅用于学习等目的。

分析

首先要爬取股票数据,肯定要先知道有哪些股票吧,这里小编找到了一个网站,这个网站上有股票的编码列表:https://hq.gucheng.com/gpdmylb.html 。

打开 Chrome 的开发者模式,将股票代码一个一个选出来吧。具体过程小编就不贴了,各位同学自行实现。

我们可以将所有的股票代码存放在一个列表中,剩下的就是找一个网站,循环的去将每一只股票的数据取出来咯。

这个网站小编已经找好了,是同花顺,链接: http://stockpage.10jqka.com.cn/000001/ 。

想必各位聪明的同学已经发现了,这个链接中的 000001 就是股票代码。

我们接下来只需要拼接这个链接,就能源源不断的获取到我们想要的数据。

实战

首先,还是先介绍一下本次实战用到的请求库和解析库为: Requests 和 pyquery 。数据存储最后还是落地在 Mysql 。

获取股票代码列表

靠前步当然是先构建股票代码列表咯,我们先定义一个方法:

def get_stock_list(stockListURL): r =requests.get(stockListURL, headers = headers) doc = PyQuery(r.text) list = [] # 获取所有 section 中 a 节点,并进行迭代 for i in doc('.stockTable a').items(): try: href = i.attr.href list.append(re.findall(r"\d{6}", href)[0]) except: continue list = [item.lower() for item in list] # 将爬取信息转换小写 return list

将上面的链接当做参数传入,大家可以自己运行下看下结果,小编这里就不贴结果了,有点长。。。

获取详情数据

详情的数据看起来好像是在页面上的,但是,实际上并不在,实际最终获取数据的地方并不是页面,而是一个数据接口。

http://qd.10jqka.com.cn/quote.php?cate=real&type=stock&callback=showStockDate&return=json&code=000001

至于是怎么找出来,小编这次就不说,还是希望各位想学爬虫的同学能自己动动手,去寻找一下,多找几次,自然就摸到门路了。

现在数据接口有了,我们先看下返回的数据吧:

showStockDate({"info":{"000001":{"name":"\u5e73\u5b89\u94f6\u884c"}},"data":{"000001":{"10":"16.13","8":"16.14","9":"15.87","13":"78795234.00","19":"1262802470.00","7":"16.12","15":"40225508.00","14":"37528826.00","69":"17.73","70":"14.51","12":"5","17":"945400.00","264648":"0.010","199112":"0.062","1968584":"0.406","2034120":"9.939","1378761":"16.026","526792":"1.675","395720":"-948073.000","461256":"-39.763","3475914":"313014790000.000","1771976":"1.100","6":"16.12","11":""}}})

很明显,这个结果并不是标准的 json 数据,但这个是 JSONP 返回的标准格式的数据,这里我们先处理下头尾,将它变成一个标准的 json 数据,再对照这页面的数据进行解析,最后将分析好的值写入数据库中。

def getStockInfo(list, stockInfoURL): count = 0 for stock in list: try: url = stockInfoURL + stock r = requests.get(url, headers=headers) # 将获取到的数据封装进字典 dict1 = json.loads(r.text[14: int(len(r.text)) - 1]) print(dict1) # 获取字典中的数据构建写入数据模版 insert_data = { "code": stock, "name": dict1['info'][stock]['name'], "jinkai": dict1['data'][stock]['7'], "chengjiaoliang": dict1['data'][stock]['13'], "zhenfu": dict1['data'][stock]['526792'], "zuigao": dict1['data'][stock]['8'], "chengjiaoe": dict1['data'][stock]['19'], "huanshou": dict1['data'][stock]['1968584'], "zuidi": dict1['data'][stock]['9'], "zuoshou": dict1['data'][stock]['6'], "liutongshizhi": dict1['data'][stock]['3475914'] } cursor.execute(sql_insert, insert_data) conn.commit() print(stock, ':写入完成') except: print('写入异常') # 遇到错误继续循环 continue

这里我们加入异常处理,因为本次爬取的数据有些多,很有可能由于某些原因抛出异常,我们当然不希望有异常的时候中断数据抓取,所以这里添加异常处理继续抓取数据。

完整代码

我们将代码稍作封装,完成本次的实战。

import requestsimport reimport jsonfrom pyquery import PyQueryimport pymysql# 数据库连接def connect(): conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', database='test', charset='utf8mb4') # 获取操作游标 cursor = conn.cursor() return {"conn": conn, "cursor": cursor}connection = connect()conn, cursor = connection['conn'], connection['cursor']sql_insert = "insert into stock(code, name, jinkai, chengjiaoliang, zhenfu, zuigao, chengjiaoe, huanshou, zuidi, zuoshou, liutongshizhi, create_date) values (%(code)s, %(name)s, %(jinkai)s, %(chengjiaoliang)s, %(zhenfu)s, %(zuigao)s, %(chengjiaoe)s, %(huanshou)s, %(zuidi)s, %(zuoshou)s, %(liutongshizhi)s, now())"headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}def get_stock_list(stockListURL): r =requests.get(stockListURL, headers = headers) doc = PyQuery(r.text) list = [] # 获取所有 section 中 a 节点,并进行迭代 for i in doc('.stockTable a').items(): try: href = i.attr.href list.append(re.findall(r"\d{6}", href)[0]) except: continue list = [item.lower() for item in list] # 将爬取信息转换小写 return listdef getStockInfo(list, stockInfoURL): count = 0 for stock in list: try: url = stockInfoURL + stock r = requests.get(url, headers=headers) # 将获取到的数据封装进字典 dict1 = json.loads(r.text[14: int(len(r.text)) - 1]) print(dict1) # 获取字典中的数据构建写入数据模版 insert_data = { "code": stock, "name": dict1['info'][stock]['name'], "jinkai": dict1['data'][stock]['7'], "chengjiaoliang": dict1['data'][stock]['13'], "zhenfu": dict1['data'][stock]['526792'], "zuigao": dict1['data'][stock]['8'], "chengjiaoe": dict1['data'][stock]['19'], "huanshou": dict1['data'][stock]['1968584'], "zuidi": dict1['data'][stock]['9'], "zuoshou": dict1['data'][stock]['6'], "liutongshizhi": dict1['data'][stock]['3475914'] } cursor.execute(sql_insert, insert_data) conn.commit() print(stock, ':写入完成') except: print('写入异常') # 遇到错误继续循环 continuedef main(): stock_list_url = 'https://hq.gucheng.com/gpdmylb.html' stock_info_url = 'http://qd.10jqka.com.cn/quote.php?cate=real&type=stock&callback=showStockDate&return=json&code=' list = get_stock_list(stock_list_url) # list = ['601766'] getStockInfo(list, stock_info_url)if __name__ == '__main__': main()

成果

最终小编耗时 15 分钟左右,成功抓取数据 4600+ 条,结果就不展示了。

示例代码

本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。

示例代码-Github

以上就是如何在大智慧中到处股票的数据如何用爬虫抓取股市?用python爬虫爬取股票数据的详细内容,希望通过阅读小编的文章之后能够有所收获!

版权:本文由用户自行上传,观点仅代表作者本人,本站仅供存储服务。如有侵权,请联系管理员删除,了解详情>>

发布
问题