如何用java爬虫抓取网页数据股市数据并生成分析报表

金头条 - 股票即时新闻爬虫
09:33:39 +08:00 · 2876 次点击
跳过正文:
添加自选股,获得即时新闻。
其他附加功能(全网热点、限售解禁预警、机构内参、异动个股等等)
爬虫: Python 3 - Celery - re2 - BS4 - Supervisord - Elixir
后端: Python 3 - Tornado - PostgreSQL
前端: Angular 2 - SystemJS
项目状态:
beta ,服务器随时挂掉 :-D
缺钱、缺人,聊一聊?邮件(): YXdlc29tZXZpdG9AbGl2ZS5jb20=
Angular 2 毛病多多呀,用作 Production 很是费劲:
iOS 不能后退 貌似 Fixed
不能设置 404 ,现在状态不清楚
想动态创建一下 innerHTML ,难得要命。
你要是用了个 Python 后端就还是算了吧
总结:如果上天再给我一次机会,我会选择用 ,即使 JSX 让人相当讨厌。
PostgreSQL
想不起来有什么可吐槽的,就是 XX 云的 RDS 太贵了,性能也不敢恭维。
Pros: 爽!分布式任务调度,加上
这个控制台,很方便呀~
Cons: 我是不知道为什么, worker 莫名的就那么,要不然也不会非要再用什么 Supervisord 。
Cons: 没什么不好的,刚接触 ioloop 概念的时候很不适应,这个是 Tornado 自创的么(挖鼻孔)?
Pros: erlang 美化版,好用呀~ 文档什么的也赞爆了:。
Cons: 不知道为什么写着写着就恶心了,感觉语言中人为干预的太多了,预设模式太多了。可能设计出来的语言就有这毛病吧。尤其是用这个库的时候越用越难受,也说不上为啥。
总结:瞎折腾这些新鲜玩意儿,有这功夫咋不用 Java 呢?咋不去上天呢?
大家有啥想聊的一起聊一聊,瞎吵吵架呗~
41 回复 &| &直到
10:51:07 +08:00
& & 09:56:40 +08:00 via Android
感谢分享! 1024
& & 09:58:49 +08:00 via Android
一个人做的吗?
& & 09:59:15 +08:00
新闻抓取的范围是哪些网站?
& & 10:00:56 +08:00 via iPhone
楼主,想找人一起玩?
& & 10:02:18 +08:00
r#2 @ 一个技术(Me)+ 一个产品兼前端(Partener)
& & 10:03:15 +08:00
r#3 @ 这......几乎全网的中文金融网站吧,大大小小一百多个。
& & 10:05:57 +08:00
r#4 @ 不知道呀,缺钱缺人的迷茫期么,发上来随便聊聊。
& & 10:09:01 +08:00
和选股宝 华尔街见闻的 差异点在哪呢
从网站没看出来
& & 10:16:20 +08:00
r#8 @ 哈哈哈哈!哈哈哈哈!
我竟无言以对(转身捂脸状)。
& & 10:31:58 +08:00 via iPhone
@ 现在股市不好,把期货带上吧
& & 10:37:10 +08:00
r#10 @ 期货是不是新闻不多?
& & 10:45:31 +08:00
这东西是创业路子吗?感觉离实用还很远,怎么熬到赚钱的时间点是个问题。如果只是玩玩基本上只能自己玩玩了。
& & 10:47:52 +08:00 via iPhone
@ 大多数类似创业项目都是不盈利的....
& & 10:54:31 +08:00
@ 不容易,支持楼主。 不知道你们的产品和其他家比优势在哪呢?
& & 11:15:53 +08:00
r#14 @ 哈哈哈哈~我也说不上来呀,或许是不上心吧,也不是在用生命去做这件事,成不成随便了~
& & 11:25:05 +08:00
我们也在做这个
& & 11:26:37 +08:00
r#16 @ 自己烧钱呢?
& & 11:38:22 +08:00
@ 创业项目不盈利不代表没有规划如何盈利以及在哪个时间点盈利 你这个只能算是玩票性质 如果没有经验 这东西基本做不下去 这类 2C 的产品前期就是要做用户量 估计你等不到那一天就没兴趣和信心了
& & 11:41:05 +08:00
@ 额,股市数据的集合类应用应该很多了。
如果你们能加上数据分析,通过数据给小白荐股,还是有市场的。
不过估计技术方面相当难了, 2333
可以换个思路,有没有兴趣做个足彩的数据聚合,通过历史数据分析,然后给用户推荐购买,这个比起你们现在的项目,可行性更高,而且有市场空白,个人觉得。
& & 11:42:27 +08:00
r#18 @ 我觉得,你讲得很对。
& & 11:44:04 +08:00
r#19 @ 足彩不跟国内股票一样是瞎胡闹么?不知道有没有实用价值呀(对彩民)?
& & 11:47:32 +08:00
@ 足彩就是骗局 在冠军杯期间就看出来了 赔率高的大热门的队都输掉了 伤心的不要不要的 而且还是国内足彩 你懂的...
& & 11:48:12 +08:00
@ 足彩类的才多 你以为
& & 13:06:10 +08:00
我有朋友玩足彩,而且足彩有很多人是玩外盘,赔率比国内良心很多。
有人分析,足彩的庄家设计赔率,通过动态调整,引导用户,保证有一个大概率的收益平衡,而且收益率远没有摇号的彩票那么高。
一个单场一定有赢的玩家,规模化的输多赢少,庄家就有了稳定的收益了。
如果能做到跟着庄家走,赚钱的概率应该就很稳定了。
以上是我的个人理解,求各位轻拍。
& & 13:08:03 +08:00
@ 我知道 500 ,没有用过,不知道有没有推荐的业务...
& & 13:40:56 +08:00
@ &这......几乎全网的中文金融网站吧,大大小小一百多个。
请教,这么多网站,一个个抓?累不累?
& & 16:00:56 +08:00
不好意思,我一点,不小心点挂了
& & 17:01:09 +08:00
话说为什么国内不同股票网站会有不同的交易数据呢,比如新浪、同花顺、东方财富等网站对于同一支股票的大单交易的明细和数量是不同的,都不知道哪个靠谱了
& & 17:31:14 +08:00
为什么不试试 riotjs
& & 17:36:42 +08:00
r#27 @ 哈哈,不碍事~
& & 17:37:33 +08:00
r#28 @ 时间差问题吧~很难说谁的更及时。
& & 17:37:57 +08:00
r#29 @ 没用过,去看看。
& & 17:40:15 +08:00
r#26 @ 还好吧,写好每个网站的适配模型,平时维护一下就好了,网站不改版或者改变防抓策略的话,维护工作不算大。
& & 23:46:02 +08:00 via Android
不错啊,只支持 a 股?
& & 05:05:56 +08:00
r#34 @ 嗯~
& & 07:38:59 +08:00 via iPhone
@ 老板掏钱,不要荐股,有法律风险
& & 07:44:50 +08:00
r#36 @ 多谢。
& & 09:24:43 +08:00
@ 其实有这东西了,硬广一下,球球是道
& & 23:26:05 +08:00 via Android
@ 额,我去关注一下,谢谢
& & 23:45:44 +08:00
& & 10:51:07 +08:00
没看懂价值在哪里?
& · & 896 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.0 · 59ms · UTC 17:32 · PVG 01:32 · LAX 10:32 · JFK 13:32? Do have faith in what you're doing.美股实时行情_新浪财经_新浪网
指数成份:他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&&&&& 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。
&&&&& 本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。
一、网页源码的获取
&&&&& 很多人喜欢用python爬虫的原因之一就是它容易上手。只需以下几行代码既可抓取大部分网页的源码。
import urllib.request
url='http://quote.stockstar.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('&tbody[\s\S]*&/tbody&')
body=re.findall(pattern,str(content))
#匹配&tbody和&/tbody&之间的所有代码
pattern=re.compile('&(.*?)&')
stock_page=re.findall(pattern,body[0])
#匹配&和&之间的所有信息
&&&&&& 其中compile方法为编译匹配模式,findall方法用此匹配模式去匹配出所需信息,并以列表的方式返回。正则表达式的语法还挺多的,下面我只罗列所用到符号的含义。
匹配任意除换行符&\n&外的字符
匹配前一个字符0次或无限次
匹配前一个字符0次或一次
空白字符:[&空格&\t\r\n\f\v]
非空白字符:[^\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])
&&&&& 打印的部分结果如下
&&&&& 抓取证券之星上当天所有A股数据的最终程序如下
import urllib
import urllib.request
import random
import time
#抓取所需内容
user_agent = ["Mozilla/5.0 (Windows NT 10.0; WOW64)", 'Mozilla/5.0 (Windows NT 6.3; WOW64)',
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko)',
'Mozilla/5.0 (W U; Windows NT 5.2) Gecko/ Firefox/3.0.1',
'Mozilla/5.0 (W U; Windows NT 5.1) Gecko/ Firefox/2.0.0.3',
'Mozilla/5.0 (W U; Windows NT 5.1) Gecko/ Firefox/1.5.0.12',
'Opera/9.27 (Windows NT 5.2; U; zh-cn)',
'Mozilla/5.0 (M PPC Mac OS X; U; en) Opera 8.0',
'Opera/8.0 (M PPC Mac OS X; U; en)',
'Mozilla/5.0 (W U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/ Firefox/2.0.0.12 Navigator/9.0.0.6',
'Mozilla/4.0 ( MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)',
'Mozilla/4.0 ( MSIE 8.0; Windows NT 6.1; Trident/4.0)',
'Mozilla/5.0 ( MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/4.0.6.2000 Chrome/26.0.1410.43 Safari/537.1 ',
'Mozilla/5.0 ( MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; QQBrowser/7.3.)',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/ Firefox/21.0 ',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92 Safari/537.1 LBBROWSER',
'Mozilla/5.0 ( MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BIDUBrowser 2.x)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/3.0 Safari/536.11']
stock_total=[]
#stock_total:所有页面的股票数据
stock_page:某页的股票数据
for page in range(1,8):
url='http://quote.stockstar.com/stock/ranklist_a_3_1_'+str(page)+'.html'
request=urllib.request.Request(url=url,headers={"User-Agent":random.choice(user_agent)})#随机从user_agent列表中抽取一个元素
response=urllib.request.urlopen(request)
except urllib.error.HTTPError as e:
print('page=',page,'',e.code)
except urllib.error.URLError as e:
print('page=',page,'',e.reason)
content=response.read().decode('gbk')
#读取网页内容
print('get page',page)
#打印成功获取的页码
pattern=re.compile('&tbody[\s\S]*&/tbody&')
body=re.findall(pattern,str(content))
pattern=re.compile('&(.*?)&')
stock_page=re.findall(pattern,body[0])
stock_total.extend(stock_page)
time.sleep(random.randrange(1,4))
#每抓一页随机休眠几秒,数值可根据实际情况改动
#删除空白字符
stock_last=stock_total[:]
#stock_last为最终所要得到的股票数据
for data in stock_total:
if data=='':
stock_last.remove('')
#打印部分结果
print('代码','\t','简称','
','\t','最新价','\t','涨跌幅','\t','涨跌额','\t','5分钟涨幅')
for i in range(0,len(stock_last),13):
#原网页有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])
python爬虫实例
阅读(...) 评论()如何用爬虫抓取股市数据并生成分析报表_百度知道
如何用爬虫抓取股市数据并生成分析报表
我有更好的答案
用ForeSpider数据采集系统,可以采集股市数据,在采集的同时统计数据、自动分类,形成分析报表
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 java爬虫抓取动态生成 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信