爬取股票历史数据

chenologin2分享 时间:

【获取股票历史数据】国内股票历史数据,一分钟历史数据哪里有?

HDFS被设计成适合批量处理的,而不是用户交互式的。

重点是在数据吞吐量,而不是数据访问的反应时间,POSIX的很多硬性需求对于HDFS应用都是非必须的,去掉POSIX一小部分关键语义可以获得更好的数据吞吐率。

大数据集运行在HDFS之上的程序有很大量的数据集。

典型的HDFS文件大小是GB到TB的级别。

所以,HDFS被调整成支持大文件。

它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。

简单一致性模型大部分的HDFS程序对文件操作需要的是一次写多次读取的操作模式。

一个文件一旦创建、写入、关闭之后就不需要修改了。

这个假定简单化了数据一致的问题,并使高吞吐量的数据访问变得可能。

一个Map-Reduce程序或者网络爬虫程序都可以完美地适合这个模型。

移动计算比移动数据更经济在靠近计算数据所存储的位置来进行计算是最理想的状态,尤其是在数据集特别巨大的时候。

这样消除了网络的拥堵,提高了系统的整体吞吐量。

一个假定就是迁移计算到离数据更近的位置比将数据移动到程序运行更近的位置要更好。

HDFS提供了接口,来让程序将自己移动到离数据存储更近的位置。

异构软硬件平台间的可移植性HDFS被设计成可以简便地实现平台间的迁移,这将推动需要大数据集的应用更广泛地采用HDFS作为平台。

名字节点和数据节点HDFS是一个主从结构,一个HDFS集群是由一个名字节点,它是一个管理文件命名空间和调节客户端访问文件的主服务器,当然还有一些数据节点,通常是一个节点一个机器,它来管理对应节点的存储。

HDFS对外开放文件命名空间并允许用户数据以文件形式存储。

内部机制是将一个文件分割成一个或多个块,这些块被存储在一组数据节点中。

名字节点用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。

它同时确定块与数据节点的映射。

数据节点负责来自文件系统客户的读写请求。

数据节点同时还要执行块的创建,删除,和来自名字节点的块复制指令。

名字节点和数据节点都是运行在普通的机器之上的软件,机器典型的都是GNU/Linux,HDFS是用java编写的,任何支持java的机器都可以运行名字节点或数据节点,利用java语言的超轻便型,很容易将HDFS部署到大范围的机器上。

典型的部署是由一个专门的机器来运行名字节点软件,集群中的其他每台机器运行一个数据节点实例。

体系结构不排斥在一个机器上运行多个数据节点的实例,但是实际的部署不会有这种情况。

集群中只有一个名字节点极大地简单化了系统的体系结构。

名字节点是仲裁者和所有HDFS元数据的仓库,用户的实际数据不经过名字节点。

如何爬取百度指数的数据

获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。

鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。

本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。

程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。

一、网页源码的获取很多人喜欢用python爬虫的原因之一就是它容易上手。

只需以下几行代码既可抓取大部分网页的源码。

import urllib.requesturl=\'ar.com/stock/ranklist_a_3_1_1.html\' #目标网址headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)"} #伪装浏览器请求报头request=urllib.request.Request(url=url,headers=headers) #请求服务器response=urllib.request.urlopen(request) #服务器应答content=response.read().decode(\'gbk\') #以一定的编码方式查看源码print(content) #打印页面源码 虽说抓一页的源码容易,不过在一个网站内大量抓取网页源码却经常遭到服务器拦截,顿时感觉世界充满了恶意。

于是我开始研习突破反爬虫限制的功法。

1.伪装流浪器报头很多服务器通过浏览器发给它的报头来确认是否是人类用户,所以我们可以通过模仿浏览器的行为构造请求报头给服务器发送请求。

服务器会识别其中的一些参数来识别你是否是人类用户,很多网站都会识别User-Agent这个参数,所以请求头最好带上。

有一些警觉性比较高的网站可能还会通过其他参数识别,比如通过Accept-Language来辨别你是否是人类用户,一些有防盗链功能的网站还得带上referer这个参数等等。

2.随机生成UA证券之星只需带User-Agent这个参数就可以抓取页面信息了,不过连续抓取几页就被服务器阻止了。

于是我决定每次抓取数据时模拟不同的浏览器发送请求,而服务器通过User-Agent来识别不同浏览器,所以每次爬取页面可以通过随机生成不同的UA构造报头去请求服务器,3.减慢爬取速度虽然模拟了不同浏览器爬取数据,但发现有的时间段可以爬取上百页的数据,有时候却只能爬取十来页,看来服务器还会根据你的访问的频率来识别你是人类用户还是网络爬虫。

所以我每抓取一页都让它随机休息几秒,加入此句代码后,每个时间段都能爬取大量股票数据了。

4.使用代理IP天有不测风云,程序在公司时顺利测试成功,回寝室后发现又只能抓取几页就被服务器阻止了。

惊慌失措的我赶紧询问度娘,获知服务器可以识别你的IP,并记录此IP访问的次数,可以使用高匿的代理IP,并在抓取的过程中不断的更换,让服务器无法找出谁是真凶。

此功还未修成,欲知后事如何,请听下回分解。

5.其他突破反爬虫限制的方法很多服务器在接受浏览器请求时会发送一个cookie文件给浏览器,然后通过cookie来跟踪你的访问过程,为了不让服务器识别出你是爬虫,建议最好带上cookie一起去爬取数据;如果遇上要模拟登陆的网站,为了不让自己的账号被拉黑,可以申请大量的账号,然后再爬入,此处涉及模拟登陆、验证码识别等知识,暂时不再深究...总之,对于网站主人来说,有些爬虫确实是令人讨厌的,所以会想出很多方法限制爬虫的进入,所以我们在强行进入之后也得注意些礼仪,别把人家的网站给拖垮了。

二、所需内容的提取获取网页源码后,我们就可以从中提取我们所需要的数据了。

从源码中获取所需信息的方法有很多,使用正则表达式就是比较经典的方法之一。

我们先来看所采集网页源码的部分内容。

为了减少干扰,我先用正则表达式从整个页面源码中匹配出以上的主体部分,然后从主体部分中匹配出每只股票的信息。

代码如下。

pattern=re.compile(\'\') body=re.findall(pattern,str(content)) #匹配之间的所有代码pattern=re.compile(\'>(.*?)和其中compile方法为编译匹配模式,findall方法用此匹配模式去匹配出所需信息,并以列表的方式返回。

正则表达式的语法还挺多的,下面我只罗列所用到符号的含义。

语法 说明 . 匹配任意除换行符“\\n”外的字符 * 匹配前一个字符0次或无限次 ? 匹配前一个字符0次或一次 \\s 空白字符:[\\t\\r\\n\\f\\v] \\S 非空白字符:[^\\s] [...] 字符集,对应的位置可以是字符集中任意字符 (...) 被括起来的表达式将作为分组,里面一般为我们所需提取的内容 正则表达式的语法挺多的,也许有大牛只要一句正则表达式就可提取我想提取的内容。

在提取股票主体部分代码时发现有人用xpath表达式提取显得更简洁一些,看来页面解析也有很长的一段路要走。

三、所得结果的整理通过非贪婪模式(.*?)匹配>和stock_last=stock_total[:] #stock_total:匹配出的股票数据for data in stock_total: #stock_last:整理后的股票数据if data==\'\':stock_last.remove(\'\')最后,我们可以打印几列数据看下效果,代码如下print(\'代码\',\'\\t\',\'简称\',\' \',\'\\t\',\'最新价\',\'\\t\',\'涨跌幅\',\'\\t\',\'涨跌额\',\'\\t\',\'5分钟涨幅\')for i in range(0,len(stock_last),13): #网页总共有13列数据print(stock_last[i],\'\\t\',stock_last[i+1],\' \',\'\\t\',stock_last[i+2],\' \',\'\\t\',stock_last[i+3],\' \',\'\\t\',stock_last[i+4],\' \',\'\\t\',stock_last[i+5])

能爬取股票帐号信息吗

HDFS被设计成适合批量处理的,而不是用户交互式的。

重点是在数据吞吐量,而不是数据访问的反应时间,POSIX的很多硬性需求对于HDFS应用都是非必须的,去掉POSIX一小部分关键语义可以获得更好的数据吞吐率。

大数据集运行在HDFS之上的程序有很大量的数据集。

典型的HDFS文件大小是GB到TB的级别。

所以,HDFS被调整成支持大文件。

它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。

简单一致性模型大部分的HDFS程序对文件操作需要的是一次写多次读取的操作模式。

一个文件一旦创建、写入、关闭之后就不需要修改了。

这个假定简单化了数据一致的问题,并使高吞吐量的数据访问变得可能。

一个Map-Reduce程序或者网络爬虫程序都可以完美地适合这个模型。

移动计算比移动数据更经济在靠近计算数据所存储的位置来进行计算是最理想的状态,尤其是在数据集特别巨大的时候。

这样消除了网络的拥堵,提高了系统的整体吞吐量。

一个假定就是迁移计算到离数据更近的位置比将数据移动到程序运行更近的位置要更好。

HDFS提供了接口,来让程序将自己移动到离数据存储更近的位置。

异构软硬件平台间的可移植性HDFS被设计成可以简便地实现平台间的迁移,这将推动需要大数据集的应用更广泛地采用HDFS作为平台。

名字节点和数据节点HDFS是一个主从结构,一个HDFS集群是由一个名字节点,它是一个管理文件命名空间和调节客户端访问文件的主服务器,当然还有一些数据节点,通常是一个节点一个机器,它来管理对应节点的存储。

HDFS对外开放文件命名空间并允许用户数据以文件形式存储。

内部机制是将一个文件分割成一个或多个块,这些块被存储在一组数据节点中。

名字节点用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。

它同时确定块与数据节点的映射。

数据节点负责来自文件系统客户的读写请求。

数据节点同时还要执行块的创建,删除,和来自名字节点的块复制指令。

名字节点和数据节点都是运行在普通的机器之上的软件,机器典型的都是GNU/Linux,HDFS是用java编写的,任何支持java的机器都可以运行名字节点或数据节点,利用java语言的超轻便型,很容易将HDFS部署到大范围的机器上。

典型的部署是由一个专门的机器来运行名字节点软件,集群中的其他每台机器运行一个数据节点实例。

体系结构不排斥在一个机器上运行多个数据节点的实例,但是实际的部署不会有这种情况。

集群中只有一个名字节点极大地简单化了系统的体系结构。

名字节点是仲裁者和所有HDFS元数据的仓库,用户的实际数据不经过名字节点。

68188