Ⅰ 互聯網金融爬蟲怎麼寫
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多個分社記者站,確保在世界范圍內有新聞都會第一時間得到消息,然後像金十數據這樣的金融服務終端和這些通訊社有合作,他們通過通訊社獲取到新聞源後再考慮是否投入能力進行深度報道,如果是簡訊的話,通訊社的信息編輯後發送即可。