Ⅰ 互联网金融爬虫怎么写
Previous on 系列教程:
互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
互联网金融爬虫怎么写-第二课 雪球网股票爬虫(正则表达式入门)
互联网金融爬虫怎么写-第三课 雪球网股票爬虫(ajax分析)
哈哈,一小时不见,我又来了,话说出教程就是这么任性,咱们乘热打铁,把上节课分析完成但是没写的代码给完成了!
工具要求:教程中主要使用到了 1、神箭手云爬虫 框架 这个是爬虫的基础,2、Chrome浏览器和Chrome的插件XpathHelper 这个用来测试Xpath写的是否正确 3、Advanced REST Client用来模拟提交请求
基础知识:本教程中主要用到了一些基础的js和xpath语法,如果对这两种语言不熟悉,可以提前先学习下,都很简单。
还记得我们在遥远的电商系列爬虫教程的第一课里提到具体写爬虫的几个步骤吗?我们沿着路径再来走一遍:
第一步:确定入口URL
暂且使用这个第一页的ajax的url链接:
[html] view plain
http://xueqiu.com/stock/cata/stocklist.json?page=1&size=30&order=desc&orderby=percent&type=11%2C12
第二步:区分内容页和中间页
这次大家有点犯难了,虽然说每一个股票都有一个单独的页面,但是列表页的信息已经蛮多的了,光爬取列表页信息就已经够了,那怎么区分内容页和中间页呢?其实我们只需要将内容页和中间页的正则设置成一样的既可。如下:
[html] view plain
http://xueqiu.com/stock/cata/stocklist\\.json\\?page=\\d+&size=30&order=desc&orderby=percent&type=11%2C12
在提醒大家一下,这里之所以转义符用了两个是因为在神箭手中,设置正则时,是字符串设置,需要对转义符再做一次转义。
第三步:内容页抽取规则
由于ajax返回的是json,而神箭手是支持jsonpath的提取方式的,因此提取规则就很简单了。不过这里要特殊注意的是,由于我们是在列表页抽取数据,因此数据最顶层相当于是一个列表,我们需要在顶层的field上设置一个列表数据的值。具体抽取规则如下:
[javascript] view plain
fields: [
{
name: "stocks",
selector: "$.stocks",
selectorType:SelectorType.JsonPath,
repeated: true,
children:[
{
name:"code",
alias:"代码",
selector:"$.code",
selectorType:SelectorType.JsonPath,
},
{
name:"name",
alias:"名称",
selector:"$.name",
selectorType:SelectorType.JsonPath,
},
{
name:"current",
alias:"当前价格",
selector:"$.current",
selectorType:SelectorType.JsonPath,
},
{
name:"high",
alias:"最高价格",
selector:"$.high",
selectorType:SelectorType.JsonPath,
},
{
name:"low",
alias:"最低价格",
selector:"$.low",
selectorType:SelectorType.JsonPath,
}
]
}
]
我简单抽取了一些信息,其他信息都类似。
好了,主要的代码基本已经写好了,剩下的还需要解决两个问题
1.爬取前需要先访问一下首页获取cookie
2.虽然可以直接加入下一页,但是一共有多少页并不知道。
首先对于第一点,我们只需要在beforeCrawl回调中访问一下首页即可,神箭手会自动对cookie进行处理和保存,具体代码如下:
[javascript] view plain
configs.beforeCrawl = function(site){
site.requestUrl("http://xueqiu.com");
};
好了,除了下一页基本已经没什么问题了,我们先测试一下看看效果:
数据已经出来了,没问题,第一页的数据都有了,那下一页怎么处理呢?我们有两个方案:
第一个方案:
我们可以看到json的返回值中有一个count字段,这个字段目测应该是总数据量的值,那没我们根据这个值,再加上单页数据条数,我们就可以判断总共有多少页了。
第二个方案:
我们先访问一下,假设页数很大,看看会雪球会返回什么,我们尝试访问第500页,可以看到返回值中的stocks是0个,那么我们可以根据是否有数据来判断需不需要加下一页。
两个方案各有利弊,我们这里选择用第一个方案来处理,具体代码如下:
[javascript] view plain
configs.onProcessHelperPage = function(page, content, site){
if(page.url.indexOf("page=1&size=30") !== -1){
//如果是第一页
var result = JSON.parse(page.raw);
var count = result.count.count;
var page_num = Math.ceil(count/30);
if(page_num > 1){
for(var i = 2;i<=page_num;i++){
site.addUrl("http://xueqiu.com/stock/cata/stocklist.json?page="+i+"&size=30&order=desc&orderby=percent&type=11%2C12");
}
}
}
};
好了,通过三课的艰苦奋战,终于完成了雪球沪深一览的征服。先看下跑出来的效果。
完整代码如下:
[javascript] view plain
var configs = {
domains: ["xueqiu.com"],
scanUrls: ["http://xueqiu.com/stock/cata/stocklist.json?page=1&size=30&order=desc&orderby=percent&type=11%2C12"],
contentUrlRegexes: ["http://xueqiu.com/stock/cata/stocklist\\.json\\?page=\\d+&size=30&order=desc&orderby=percent&type=11%2C12"],
helperUrlRegexes: ["http://xueqiu.com/stock/cata/stocklist\\.json\\?page=\\d+&size=30&order=desc&orderby=percent&type=11%2C12"],
fields: [
{
name: "stocks",
selector: "$.stocks",
selectorType:SelectorType.JsonPath,
repeated: true,
children:[
{
name:"code",
alias:"代码",
selector:"$.code",
selectorType:SelectorType.JsonPath,
},
{
name:"name",
alias:"名称",
selector:"$.name",
selectorType:SelectorType.JsonPath,
},
{
name:"current",
alias:"当前价格",
selector:"$.current",
selectorType:SelectorType.JsonPath,
},
{
name:"high",
alias:"最高价格",
selector:"$.high",
selectorType:SelectorType.JsonPath,
},
{
name:"low",
alias:"最低价格",
selector:"$.low",
selectorType:SelectorType.JsonPath,
}
]
}
]
};
configs.onProcessHelperPage = function(page, content, site){
if(page.url.indexOf("page=1&size=30") !== -1){
//如果是第一页
var result = JSON.parse(page.raw);
var count = result.count.count;
var page_num = Math.ceil(count/30);
if(page_num > 1){
for(var i = 2;i<=page_num;i++){
site.addUrl("http://xueqiu.com/stock/cata/stocklist.json?page="+i+"&size=30&order=desc&orderby=percent&type=11%2C12");
}
}
}
};
configs.beforeCrawl = function(site){
site.requestUrl("http://xueqiu.com");
};
var crawler = new Crawler(configs);
crawler.start();
Ⅱ 公司最近在做金融行业的舆情监控,有没有推荐的平台
之前来也做过舆情因子的源分析。主要有这么几个渠道吧:
1. 一些互联网平台或者数据提供商:比如网络指数、通联数据的舆情部分;
2.万得、choice等数据终端的舆情功能;
3.自己写Python爬虫在网络上进行实时爬取新闻、提取关键字并监控。
专业性来讲1-3由简到难
Ⅲ 互联网金融概念股龙头有哪些
互联网金融平台概念股:用友软件(600588)、内蒙君正(601519)、上海钢联(300229)、生意宝(002095)、焦点科技回(002315)、东方财富(300059)、同花顺答(300033)、赢时胜(300377)、欧浦钢网(002711)、汇金股份(300368)、小商品城(600415)、三六五网(300295)等
Ⅳ 什么是网络爬虫
为自动提取网页zd的程序,它为搜索引擎从万维网上下载网页。
网络爬虫为一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
将根据一定的回搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。
Ⅳ 大数据时代,玩“爬虫”可能触犯哪些法律
可能会侵犯一些别人的个人信息和网络安全吧。
Ⅵ 如何用大数据分析金融数据
任何数据分析的前提是首先要理解业务模型,从你的金融数据是怎么产生的,包括回哪些指标哪些数据,你的答分析是要为什么业务服务的,也就是你的目的。比如你分析金融数据的目的是要找出最有价值的金融产品,还是最有价值的客户,还是寻找最有效的成本节约途径等
在弄清楚你的分析目的,和理解清楚你的业务模式等之后,再考虑你需要采用哪些数据,采用什么方法来进行分析,这才涉及到如何进行具体的分析过程。
从整个大数据分析来看,前期的业务理解和数据整理大概要耗费一大半的精力和时间,弄清楚前期,后期的分析则会很快。
Ⅶ 互联网金融的信息处理
一是社交网络生成和传播信息,特别是对个人和机构没有义务披露的信息,使得人们的“诚信”程度提高,大大降低了金融交易的成本,对金融交易有基础作用。(社交网络具有的信息揭示作用可以表现为:个人和机构在社会中有大量利益相关者。这些利益相关者都掌握部分信息,比如财产状况、经营情况、消费习惯、信誉行为等。
单个利益相关者的信息可能有限,但如果这些利益相关者都在社交网络上发布各自掌握的信息,汇在一起就能得到信用资质和盈利前景方面的完整信息。比如,“淘宝网”类似社交网络,商户之间的交易形成的海量信息,特别是货物和资金交换的信息,显示了商户的信用资质,如果淘宝网设立小额贷款公司,利用这些信息给一些商户发放小额贷款,效果会很好。)
二是搜索引擎对信息的组织、排序和检索,能缓解信息超载问题,有针对性地满足信息需求。搜索引擎与社交网络融合是一个趋势,本质是利用社交网络蕴含的关系数据进行信息筛选,可以提高“诚信”程度。比如,抓取网页的“爬虫”算法和网页排序的链接分析方法(以Google的PageRank算法为代表)都利用了网页间的链接关系,属于关系数据。
三是云计算保障海量信息高速处理能力。在云计算的保障下,资金供需双方信息通过社交网络揭示和传播,被搜索引擎组织和标准化,最终形成时间连续、动态变化的信息序列。可以给出任何资金需求者(机构)的风险定价或动态违约概率,而且成本极低。这样,金融交易的信息基础(充分条件)就满足了。2011年2月已经出现了针对计算能力的现货交易市场,预计期货市场也将出现。金融业是计算能力的使用大户,云计算会对金融业产生重大影响。
Ⅷ 想用python量化金融,需要掌握python哪些
掘=金=量=化 有针对新手使用Python进行策略开发的文档指引,对于还没有基础的新手可以去看下
Ⅸ 如何用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])
Ⅹ 请问某些资讯网站的实时财经新闻(如金十数据)是如何做到的是用爬虫对相关网页实现的吗
大部分都是通过通讯社的终端或者咨询公司的终端(后台)收集信息,只进行简单编辑就发送。四大社都是编辑世界新闻机构,以美联社为例,全球200多个分社记者站,确保在世界范围内有新闻都会第一时间得到消息,然后像金十数据这样的金融服务终端和这些通讯社有合作,他们通过通讯社获取到新闻源后再考虑是否投入能力进行深度报道,如果是简讯的话,通讯社的信息编辑后发送即可。