本文目录一览:
- 1、如何使用python 抓取雪球网页
- 2、如何使用 Python 抓取雪球网页
- 3、Python爬虫可以爬取什么
- 4、python量化哪个平台可以回测模拟实盘还不要钱
- 5、类函数、成员函数、静态函数、抽象函数、方法伪装属性
如何使用python 抓取雪球网页
最简单可以用urllib,python2.x和python3.x的用法不同,以python2.x为例:
import urllib
html = urllib.open(url)
text = html.read()
复杂些可以用requests库,支持各种请求类型,支持cookies,header等
再复杂些的可以用selenium,支持抓取javascript产生的文本
如何使用 Python 抓取雪球网页
#start coding
首先要知道自己在爬什么~楼主说找到HTML的代码云云,思路其实是错误的。因为我们想要的内容不在原始的html里面。但是肯定在浏览器和服务器之间的通信里,我们只要找到这部分数据就好。
#我用的是Firefox的FireBug
选择网络(Chrome中应该是Network),点击调仓历史记录
可以看到浏览器和服务器之间进行了一次通信。我们截获了一个网址。打开看看。可以看到浏览器和服务器之间进行了一次通信。我们截获了一个网址。打开看看。
看上去像是一堆乱码,但是细心的话就会发现……
也就是说我们要的数据都在这里了,所以只要先获取这个页面的内容然后在提取数据就好了~
#python3项目,python2中请使用urllib和urllib2
import urllib.request
url = '?cube_symbol=ZH010389count=20page=1'
req = urllib.request.Request(url,headers=headers)
html = urllib.request.urlopen(req).read().decode('utf-8')
print(html)
运行一下~
报错了~报错没关系,兵来将挡水来土掩~
403禁止访问…应该是headers的问题…什么是headers呢…403禁止访问…应该是headers的问题…什么是headers呢…
你现在用python去访问网页,网页得到的请求就是你是python程序,但是网页并不想让程序看到自己,因为他是给人看的,资源都被程序占了算什么,所以我们要让python伪装成浏览器。
依然是用Firebug查看headers信息。
然后我们完善代码在访问过程中添加headers~然后我们完善代码在访问过程中添加headers~
import urllib.request
headers = {'X-Requested-With': 'XMLHttpRequest',
'Referer': '',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',
'Host': 'xueqiu.com',
#'Connection':'keep-alive',
#'Accept':'*/*',
'cookie':'s=iabht2os.1dgjn9z; xq_a_token=02a16c8dd2d87980d1b3ddced673bd6a74288bde; xq_r_token=024b1e233fea42dd2e0a74832bde2c914ed30e79; __utma=1.2130135756.1433017807.1433017807.1433017807.1;'
'__utmc=1; __utmz=1.1433017807.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); Hm_lvt_1db88642e346389874251b5a1eded6e3=1433017809; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1433017809'}
url = '?cube_symbol=ZH010389count=20page=1'
req = urllib.request.Request(url,headers=headers)
html = urllib.request.urlopen(req).read().decode('utf-8')
print(html)
这次得到想要的结果了~
我们回过头再去看headers会发现,其实有些我并没有写进去,你也可以自己尝试把headers中的某一行注释掉运行。但是每个站是不一样的,你把所有的都填上去是一定能运行成功的,但是可能其中某一些不是必需的。
比如我们这里只要有User-Agent(缺少报错403)和cookie(缺少报错400)。
好~我们现在拿到了想要的数据,但是看上去太复杂了,一点都不友好。现在我们来解析一下这个网页。其实这个网页是json格式的数据包。
然后我们来观察这个数据的解析。然后我们来观察这个数据的解析。
#你可以直接点击Firebug中的JSON来看,也可以复制到Notepad++中使用json viewer插件查看。
大概是这个样子的……大概是这个样子的……
有了json的构成结构我们就可以来解析它了…
我直接拿Python Shell调试,一会儿完善代码
没什么问题~一切看起来很完美的样子~这一步其实没什么难度,只要你能看懂上一步里我们分析的json数据的组成结构,然后一层一层地向下解析数据就可以了。
完善代码。
import urllib.request
import json
headers = {#'X-Requested-With': 'XMLHttpRequest',
#'Referer': '',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',
#'Host': 'xueqiu.com',
#'Connection':'keep-alive',
#'Accept':'*/*',
'cookie':'s=iabht2os.1dgjn9z; xq_a_token=02a16c8dd2d87980d1b3ddced673bd6a74288bde; xq_r_token=024b1e233fea42dd2e0a74832bde2c914ed30e79; __utma=1.2130135756.1433017807.1433017807.1433017807.1;'
'__utmc=1; __utmz=1.1433017807.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); Hm_lvt_1db88642e346389874251b5a1eded6e3=1433017809; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1433017809'}
url = '?cube_symbol=ZH010389count=20page=1'
req = urllib.request.Request(url,headers=headers)
html = urllib.request.urlopen(req).read().decode('utf-8')
#print(html)
data = json.loads(html)
print('股票名称',end=':')
print(data['list'][0]['rebalancing_histories'][0]['stock_name'],end=' 持仓变化')
print(data['list'][0]['rebalancing_histories'][0]['prev_weight'],end='--')
print(data['list'][0]['rebalancing_histories'][0]['target_weight'])
print('股票名称',end=':')
print(data['list'][0]['rebalancing_histories'][1]['stock_name'],end=' 持仓变化')
print(data['list'][0]['rebalancing_histories'][1]['prev_weight'],end='--')
print(data['list'][0]['rebalancing_histories'][1]['target_weight'])
运行程序~
好嘞!搞定收工!
当然也还不能收工……只是我不干了而已……
To-dos:
可以看到程序是面向过程的…重复代码很多,可以通过定义类或方法实现调用
大概……大概得写点注释……不过这么简单直接无脑面向过程的代码真的需要注释吗
如果是想在他持仓变化时收到提醒,需要爬虫定时爬取页面数据与之前数据进行比较
如果你更细心的话会发现最初的json网址的构成是这样的…cube_symbol='#此处可添加任意组合的号码例如ZH010389'count=‘#此处数字是一次获取的交易变化数量,也就是说你一次性拿到了20次的交易,你点开之前交易记录的时候并不会重新请求数据而是读取了本地现有的数据此处数据可以任意修改哦~很神奇的试一试吧~20’page=‘和前面联系起来,前面是一次性获取20条记录,这边便是页码,通过对page数的控制利用循环可以输出所有交易过程,当然,40一页和20两页的效果显然是一样的,看你怎么玩儿了~1’
如果你有耐心看完上面那一大段话的话想必你可以有更多的想法。让别人来指导我们的思路是好的,可是投资的机会稍瞬即逝,跟在别人后面是没有前途的,我们要学习。大数据的时代为什么不试试爬更多人的更多投资记录呢?比如在雪球首页爬取首页推荐的组合,然后自动爬取这些组合所做的所有操作~这样你是不是就有了很厚的一本交易目录,结合过去的股市数据(这些能不能想办法自动获取呢?),你可以自己尝试分析别人作出投资决定的原因(是不是可以把数据自动写入一个excel?提示:xlwt3)…最终指导自己的投资。大数据学习,想想都炫酷。可惜我不炒股…
大概就酱紫~希望有帮助~
写这么多是因为我自己在学爬虫…一周了…看到实践的机会就来试一下…所以是边调BUG边写答案~
大概就写这么多吧…后面的To-dos哪天我突然感兴趣了会试着写一下或者过来补充的…
看到这个答案的…前辈还希望多多指教;看到这个答案的新手…欢迎交流:P
Python爬虫可以爬取什么
Python爬虫可以爬取的东西有很多,Python爬虫怎么学?简单的分析下:
如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得简单、容易上手。
利用爬虫我们可以获取大量的价值数据,从而获得感性认识中不能得到的信息,比如:
知乎:爬取优质答案,为你筛选出各话题下最优质的内容。
淘宝、京东:抓取商品、评论及销量数据,对各种商品及用户的消费场景进行分析。
安居客、链家:抓取房产买卖及租售信息,分析房价变化趋势、做不同区域的房价分析。
拉勾网、智联:爬取各类职位信息,分析各行业人才需求情况及薪资水平。
雪球网:抓取雪球高回报用户的行为,对股票市场进行分析和预测。
爬虫是入门Python最好的方式,没有之一。Python有很多应用的方向,比如后台开发、web开发、科学计算等等,但爬虫对于初学者而言更友好,原理简单,几行代码就能实现基本的爬虫,学习的过程更加平滑,你能体会更大的成就感。
掌握基本的爬虫后,你再去学习Python数据分析、web开发甚至机器学习,都会更得心应手。因为这个过程中,Python基本语法、库的使用,以及如何查找文档你都非常熟悉了。
对于小白来说,爬虫可能是一件非常复杂、技术门槛很高的事情。比如有人认为学爬虫必须精通 Python,然后哼哧哼哧系统学习 Python 的每个知识点,很久之后发现仍然爬不了数据;有的人则认为先要掌握网页的知识,遂开始 HTMLCSS,结果入了前端的坑,瘁……
但掌握正确的方法,在短时间内做到能够爬取主流网站的数据,其实非常容易实现,但建议你从一开始就要有一个具体的目标。
在目标的驱动下,你的学习才会更加精准和高效。那些所有你认为必须的前置知识,都是可以在完成目标的过程中学到的。这里给你一条平滑的、零基础快速入门的学习路径。
1.学习 Python 包并实现基本的爬虫过程
2.了解非结构化数据的存储
3.学习scrapy,搭建工程化爬虫
4.学习数据库知识,应对大规模数据存储与提取
5.掌握各种技巧,应对特殊网站的反爬措施
6.分布式爬虫,实现大规模并发采集,提升效率
一
学习 Python 包并实现基本的爬虫过程
大部分爬虫都是按“发送请求——获得页面——解析页面——抽取并储存内容”这样的流程来进行,这其实也是模拟了我们使用浏览器获取网页信息的过程。
Python中爬虫相关的包很多:urllib、requests、bs4、scrapy、pyspider 等,建议从requests+Xpath 开始,requests 负责连接网站,返回网页,Xpath 用于解析网页,便于抽取数据。
如果你用过 BeautifulSoup,会发现 Xpath 要省事不少,一层一层检查元素代码的工作,全都省略了。这样下来基本套路都差不多,一般的静态网站根本不在话下,豆瓣、糗事百科、腾讯新闻等基本上都可以上手了。
当然如果你需要爬取异步加载的网站,可以学习浏览器抓包分析真实请求或者学习Selenium来实现自动化,这样,知乎、时光网、猫途鹰这些动态的网站也可以迎刃而解。
二
了解非结构化数据的存储
爬回来的数据可以直接用文档形式存在本地,也可以存入数据库中。
开始数据量不大的时候,你可以直接通过 Python 的语法或 pandas 的方法将数据存为csv这样的文件。
当然你可能发现爬回来的数据并不是干净的,可能会有缺失、错误等等,你还需要对数据进行清洗,可以学习 pandas 包的基本用法来做数据的预处理,得到更干净的数据。
三
学习 scrapy,搭建工程化的爬虫
掌握前面的技术一般量级的数据和代码基本没有问题了,但是在遇到非常复杂的情况,可能仍然会力不从心,这个时候,强大的 scrapy 框架就非常有用了。
scrapy 是一个功能非常强大的爬虫框架,它不仅能便捷地构建request,还有强大的 selector 能够方便地解析 response,然而它最让人惊喜的还是它超高的性能,让你可以将爬虫工程化、模块化。
学会 scrapy,你可以自己去搭建一些爬虫框架,你就基本具备爬虫工程师的思维了。
四
学习数据库基础,应对大规模数据存储
爬回来的数据量小的时候,你可以用文档的形式来存储,一旦数据量大了,这就有点行不通了。所以掌握一种数据库是必须的,学习目前比较主流的 MongoDB 就OK。
MongoDB 可以方便你去存储一些非结构化的数据,比如各种评论的文本,图片的链接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。
因为这里要用到的数据库知识其实非常简单,主要是数据如何入库、如何进行提取,在需要的时候再学习就行。
五
掌握各种技巧,应对特殊网站的反爬措施
当然,爬虫过程中也会经历一些绝望啊,比如被网站封IP、比如各种奇怪的验证码、userAgent访问限制、各种动态加载等等。
遇到这些反爬虫的手段,当然还需要一些高级的技巧来应对,常规的比如访问频率控制、使用代理IP池、抓包、验证码的OCR处理等等。
往往网站在高效开发和反爬虫之间会偏向前者,这也为爬虫提供了空间,掌握这些应对反爬虫的技巧,绝大部分的网站已经难不到你了.
六
分布式爬虫,实现大规模并发采集
爬取基本数据已经不是问题了,你的瓶颈会集中到爬取海量数据的效率。这个时候,相信你会很自然地接触到一个很厉害的名字:分布式爬虫。
分布式这个东西,听起来很恐怖,但其实就是利用多线程的原理让多个爬虫同时工作,需要你掌握 Scrapy + MongoDB + Redis 这三种工具。
Scrapy 前面我们说过了,用于做基本的页面爬取,MongoDB 用于存储爬取的数据,Redis 则用来存储要爬取的网页队列,也就是任务队列。
所以有些东西看起来很吓人,但其实分解开来,也不过如此。当你能够写分布式的爬虫的时候,那么你可以去尝试打造一些基本的爬虫架构了,实现一些更加自动化的数据获取。
你看,这一条学习路径下来,你已然可以成为老司机了,非常的顺畅。所以在一开始的时候,尽量不要系统地去啃一些东西,找一个实际的项目(开始可以从豆瓣、小猪这种简单的入手),直接开始就好。
因为爬虫这种技术,既不需要你系统地精通一门语言,也不需要多么高深的数据库技术,高效的姿势就是从实际的项目中去学习这些零散的知识点,你能保证每次学到的都是最需要的那部分。
当然唯一麻烦的是,在具体的问题中,如何找到具体需要的那部分学习资源、如何筛选和甄别,是很多初学者面临的一个大问题。
以上就是我的回答,希望对你有所帮助,望采纳。
python量化哪个平台可以回测模拟实盘还不要钱
Python量化投资框架:回测+模拟+实盘
Python量化投资 模拟交易 平台 1. 股票量化投资框架体系 1.1 回测 实盘交易前,必须对量化交易策略进行回测和模拟,以确定策略是否有效,并进行改进和优化。作为一般人而言,你能想到的,一般都有人做过了。回测框架也如此。当前小白看到的主要有如下五个回测框架: Zipline :事件驱动框架,国外很流行。缺陷是不适合国内市场。 PyAlgoTrade : 事件驱动框架,最新更新日期为16年8月17号。支持国内市场,应用python 2.7开发,最大的bug在于不支持3.5的版本,以及不支持强大的pandas。 pybacktest :以处理向量数据的方式进行回测,最新更新日期为2个月前,更新不稳定。 TradingWithPython:基于pybacktest,进行重构。参考资料较少。 ultra-finance:在github的项目两年前就停止更新了,最新的项目在谷歌平台,无奈打不开网址,感兴趣的话,请自行查看吧。 RQAlpha:事件驱动框架,适合A股市场,自带日线数据。是米筐的回测开源框架,相对而言,个人更喜欢这个平台。 2 模拟 模拟交易,同样是实盘交易前的重要一步。以防止类似于当前某券商的事件,半小时之内亏损上亿,对整个股市都产生了恶劣影响。模拟交易,重点考虑的是程序的交易逻辑是否可靠无误,数据传输的各种情况是否都考虑到。 当下,个人看到的,喜欢用的开源平台是雪球模拟交易,其次是wind提供的模拟交易接口。像优矿、米筐和聚宽提供的,由于只能在线上平台测试,不甚自由,并无太多感觉。 雪球模拟交易:在后续实盘交易模块,再进行重点介绍,主要应用的是一个开源的easytrader系列。 Wind模拟交易:若没有机构版的话,可以考虑应用学生免费版。具体模拟交易接口可参看如下链接: 3 实盘 实盘,无疑是我们的终极目标。股票程序化交易,已经被限制。但对于万能的我们而言,总有解决的办法。当下最多的是破解券商网页版的交易接口,或者说应用爬虫爬去操作。对我而言,比较倾向于食灯鬼的easytrader系列的开源平台。对于机构用户而言,由于资金量较大,出于安全性和可靠性的考虑,并不建议应用。 easytrader系列当前主要有三个组成部分: easytrader:提供券商华泰/佣金宝/银河/广发/雪球的基金、股票自动程序化交易,量化交易组件 easyquotation : 实时获取新浪 / Leverfun 的免费股票以及 level2 十档行情 / 集思路的分级基金行情 easyhistory : 用于获取维护股票的历史数据 easyquant : 股票量化框架,支持行情获取以及交易 2. 期货量化投资框架体系 一直待在私募或者券商,做的是股票相关的内容,对期货这块不甚熟悉。就根据自己所了解的,简单总结一下。 2.1 回测 回测,貌似并没有非常流行的开源框架。可能的原因有二:期货相对股票而言,门槛较高,更多是机构交易,开源较少; 去年至今对期货监管控制比较严,至今未放开,只能做些CTA的策略,另许多人兴致泱泱吧。 就个人理解而言,可能wind的是一个相对合适的选择。 2.2 模拟 + 实盘 vn.py是国内最为流行的一个开源平台。起源于国内私募的自主交易系统,2015年初启动时只是单纯的交易API接口的Python封装。随着业内关注度的上升和社区不断的贡献,目前已经一步步成长为一套全面的交易程序开发框架。如官网所说,该框架侧重的是交易模块,回测模块并未支持。 能力有限,如果对相关框架感兴趣的话,就详看相关的链接吧。个人期望的是以RQAlpha为主搭建回测框架,以雪球或wind为主搭建模拟框架,用easy系列进行交易。
类函数、成员函数、静态函数、抽象函数、方法伪装属性
本篇博客是滚雪球学 Python 第二轮的最后一篇博客,我们将内容继续提升到面向对象部分,为你补充类里面的一些装饰器,学习之后,希望你的 Python 基础知识可以更上一层楼。
先直接看代码,再对代码内容进行分析与学习。
首先要掌握的是类函数的定义格式,在普通函数的前面添加装饰器 @classmethod ,该函数就会转换为类函数,同时函数的第一个参数默认是 cls ,该变量名可以任意,建议使用成 cls ,这个是程序员之间的约定。
在 Python 中,大部分 @classmethod 装饰的函数末尾都是 return cls(XXX) , return XXX.__new__ () 也就是 @classmethod 的一个主要用途是作为构造函数。
先掌握一个概念,静态函数不属于它所在的那个类,它是独立于类的一个单独函数,只是寄存在一个类名下,先建立这个基本概念,后面学起来就简单很多了。
在同一个类中,调用静态方法,使用 类名.函数名() 的格式。
先创建一个父类,其中包含两个静态函数与一个类函数。
再编写一个 S 类继承自 F 类:
测试之后,基本结论如下:
如果在子类中覆盖了父类的静态函数,那调用时使用的是子类自己的静态函数,
如果在子类中没有覆盖父类的静态函数,那调用时使用的是父类的静态函数,
类函数同样遵循该规则。
如果希望在子类中调用父类的属性或者函数,请使用 父类名. 的形式实现。
被 @abstractmethod 装饰的函数为抽象函数,含抽象函数的类不能实例化,继承了含抽象函数的子类必须覆盖所有抽象函数装饰的方法,未被装饰的可以不重写。
抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化,实现代码如下:
抽象基类中学习还需要了解元类相关知识,在第三轮滚雪球学 Python 中将为你展开这部分内容。
在 Python 面向对象的编码过程中, 对象.属性 来获取属性的值,使用 对象.方法() 来调用方法,通过装饰器 @property 可以将一个方法伪装成属性,从而使用 对象.方法 没有括号的形式调用。代码非常简单:
这种写法最直接的应用,就是将部分属性变成只读属性,例如,上述代码,你无法通过下述代码对 name 进行修改。
如果希望方法伪装的属性具备修改和删除功能,需要参考下述代码:
上述代码在将 name 方法伪装成属性之后,可以通过 @name.setter 和 @name.deleter 对同名的 name 方法进行装饰,从而实现了修改与删除功能。
所以一般使用方法伪装属性的步骤是:
如果你觉得这个比较麻烦,还存在一种方法伪装属性的方式。使用 property 函数,原型如下
通过上述函数将方法伪装成属性的代码为:
滚雪球学 Python 第二轮 15 篇博客在一次结束了,下一轮将在 4 月中旬再次开启,学 Python 我们一直在路上,希望本系列的课程对你的 Python 学习有所助力。