❶ 如何用python 爬虫抓取金融数据
获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。
本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。
一、网页源码的获取
很多人喜欢用python爬虫的原因之一就是它容易上手。只需以下几行代码既可抓取大部分网页的源码。
为了减少干扰,我先用正则表达式从整个页面源码中匹配出以上的主体部分,然后从主体部分中匹配出每只股票的信息。代码如下。
pattern=re.compile('<tbody[sS]*</tbody>')
body=re.findall(pattern,str(content)) #匹配<tbody和</tbody>之间的所有代码pattern=re.compile('>(.*?)<')
stock_page=re.findall(pattern,body[0]) #匹配>和<之间的所有信息
其中compile方法为编译匹配模式,findall方法用此匹配模式去匹配出所需信息,并以列表的方式返回。正则表达式的语法还挺多的,下面我只罗列所用到符号的含义。
语法 说明
. 匹配任意除换行符“ ”外的字符
* 匹配前一个字符0次或无限次
? 匹配前一个字符0次或一次
s 空白字符:[<空格> fv]
S 非空白字符:[^s]
[...] 字符集,对应的位置可以是字符集中任意字符
(...) 被括起来的表达式将作为分组,里面一般为我们所需提取的内容
正则表达式的语法挺多的,也许有大牛只要一句正则表达式就可提取我想提取的内容。在提取股票主体部分代码时发现有人用xpath表达式提取显得更简洁一些,看来页面解析也有很长的一段路要走。
三、所得结果的整理
通过非贪婪模式(.*?)匹配>和<之间的所有数据,会匹配出一些空白字符出来,所以我们采用如下代码把空白字符移除。
stock_last=stock_total[:] #stock_total:匹配出的股票数据for data in stock_total: #stock_last:整理后的股票数据
if data=='':
stock_last.remove('')
最后,我们可以打印几列数据看下效果,代码如下
print('代码',' ','简称',' ',' ','最新价',' ','涨跌幅',' ','涨跌额',' ','5分钟涨幅')for i in range(0,len(stock_last),13): #网页总共有13列数据
print(stock_last[i],' ',stock_last[i+1],' ',' ',stock_last[i+2],' ',' ',stock_last[i+3],' ',' ',stock_last[i+4],' ',' ',stock_last[i+5])
❷ python如何解析爬取的数据
用json方法转成字典
❸ 如何使用 Python 抓取雪球网页
#start coding
首先要知道自己在爬什么~楼主说找到HTML的代码云云,思路其实是错误的。因为我们想要的内容不在原始的html里面。但是肯定在浏览器和服务器之间的通信里,我们只要找到这部分数据就好。
#我用的是Firefox的FireBug
选择网络(Chrome中应该是Network),点击调仓历史记录
可以看到浏览器和服务器之间进行了一次通信。我们截获了一个网址。打开看看。可以看到浏览器和服务器之间进行了一次通信。我们截获了一个网址。打开看看。
看上去像是一堆乱码,但是细心的话就会发现……
也就是说我们要的数据都在这里了,所以只要先获取这个页面的内容然后在提取数据就好了~
#python3项目,python2中请使用urllib和urllib2
import urllib.request
url = '?cube_symbol=ZH010389&count=20&page=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=; xq_r_token=; __utma=1.2130135756.1433017807.1433017807.1433017807.1;'
'__utmc=1; __utmz=1.1433017807.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); Hm_lvt_=1433017809; Hm_lpvt_=1433017809'}
url = '?cube_symbol=ZH010389&count=20&page=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=; xq_r_token=; __utma=1.2130135756.1433017807.1433017807.1433017807.1;'
'__utmc=1; __utmz=1.1433017807.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); Hm_lvt_=1433017809; Hm_lpvt_=1433017809'}
url = '?cube_symbol=ZH010389&count=20&page=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抓取炒股软件中资金数据
这个说来有点复杂,用fiddle监控软件跟服务器间的通讯,找到数据源地址,然后用excel或python抓这个源地址数据,可能还要加上反扒代码,构造时间戳等等,你网上找python网抓视频教程看看就知道了。
❺ 用python爬虫股票能显示到窗体表格中吗
用python爬虫股票能显示到罩凳冲窗体表格中。
1、requests:用于从股票网站获取数据。
2、BeautifulSoup:用于解析HTML页面,从而提取数据。
3、pandas:用于将数据转换为数据框,以便于处理物歼和分析。
4、tkinter:用于创建GUI应用程序,包括粗橡窗体和表格。
❻ python如何获得股票实时交易数据
使用easyquotation这个库。(不用重复造轮子了)
github地址是:
https://github.com/shidenggui/easyquotation
❼ 用Python能做哪些事情
Python作为一门胶水语言,其实能做的事非常多,下面我简单介绍一下,分为八个方面,主要内容如下:
数据处理
Python提供了大量用于数据处理和科学计算的库,像numpy,scipy,pandas等,对于矩阵计算、线性代数等,numpy可以快速计算并得到结果,pandas内置的DataFrame类型可以快速处理各种常见的文件,像CSV,Excel,JSon等,是数据分析的利器,在数据处理中经常使用:
可视化
Python数据可视化库也非常丰富,除了经常使用的matplotlib外,还有许多其他可视化库,像seaborn,pyecharts等,绘制的图形种类更丰富,更漂亮,代码量也更少,非常容易学习,对于日常作图制表来说,是一个非常不错的选择:
机器学习
现在机器学习正火,其实Python里面也有现成的机器学习模块可供学习—scikit-learn,对于常见的机器学习算法,像分类、回归、聚类、降维等,这个模块都有现成的代码可直接使用,非常方便,对于想入门机器学习的朋友来说,这是一个非常不错的选择:
神经网络
神经网络起源应该比较早了,目前在图像领域应用比较广泛,Python也有现成的神经网络模块可供使用,比较有名的就是谷歌开源的tensorflow,可以快速构建神经网氏轿络模型,并支持GPU计算,对于科研人员来说,是一个非常不错的选择,当然,除此之虚埋外,还有更高级的theano,keras等,使用也非常方便:
财经金融
对于想快速获取股票财经数据的朋友来说,Python也有现成的模块可供使用—tushare,一个免费、开源的财经数据接口包,可以快速获取国内股票数据,而且自动整合了数据爬取、清洗到加工的过程,使用起来非常不错,对于金融分析人员来说,是一个非常不错的工具:
爬虫
Python非常适合做网页爬虫,像常见的urllib,bs4,requests,lxml等模块,对于爬取大部分网页来说非常容易,请求解析于一身,可以快速获取到我们需要的数据,当然,为了提高开发效率,避免重复造轮子,Python也提供了一个非常受欢迎的爬虫框架—scrapy,可定制性更高,用户只需要添加少量代码,便可快速启动爬虫:
游戏开发
对于游戏开发来差核蚂说,Python也有一个专门的平台—pygame,专门用于游戏开发,对于开发小型游戏来说,这是一个非常不错的选择,摆脱了低级语言的束缚,代码量更少也更易学习,对于游戏感兴趣的朋友来说,这是一个非常不错的选择:
视频下载
对于视频下载来说,Python也有一个下载利器—you-get,可以免费快速的下载优酷、B站、美拍等网站视频,不需要登录,一键you-get就可以下载视频到本地,还支持在线播放功能,除此之外,还可以下载图片、音频等文件,是一个非常实用的工具:
目前,就分享这8个方便吧,比较实用也比较有趣,当然,还有许多其他方面的,像Web开发、桌面GUI、测试、运维、树莓派等,网上也有相关资料可供参考,感兴趣的朋友可以自己搜一下,希望以上分享的内容能对你有所帮助吧
❽ 如何用python获取股票数据
在Python的QSTK中,是通过s_datapath变量,定义相应股票数据所在的文件夹。一般可以通过QSDATA这个环境变量来设置对应的数据文件夹。具体的股票数据来源,例如沪深、港股等市场,你可以使用免费的WDZ程序输出相应日线、5分钟数据到s_datapath变量所指定的文件夹中。然后可使用Python的QSTK中,qstkutil.DataAccess进行数据访问。
❾ 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 则用来存储要爬取的网页队列,也就是任务队列。
所以有些东西看起来很吓人,但其实分解开来,也不过如此。当你能够写分布式的爬虫的时候,那么你可以去尝试打造一些基本的爬虫架构了,实现一些更加自动化的数据获取。
你看,这一条学习路径下来,你已然可以成为老司机了,非常的顺畅。所以在一开始的时候,尽量不要系统地去啃一些东西,找一个实际的项目(开始可以从豆瓣、小猪这种简单的入手),直接开始就好。
因为爬虫这种技术,既不需要你系统地精通一门语言,也不需要多么高深的数据库技术,高效的姿势就是从实际的项目中去学习这些零散的知识点,你能保证每次学到的都是最需要的那部分。
当然唯一麻烦的是,在具体的问题中,如何找到具体需要的那部分学习资源、如何筛选和甄别,是很多初学者面临的一个大问题。
以上就是我的回答,希望对你有所帮助,望采纳。