融界7月12日消息,有投資者在互動平臺向同花順提問:董秘您好呀,同花順未來有沒有可能既開發一個反映投資者情緒變化的“情緒指數”,又增加“模擬炒股大賽”功能讓用戶鍛煉技巧,同時還能優化界面設計增加個性化主題和配色,并且考慮與其他金融機構合作推出創新金融產品或服務呀,另外您覺得當前股市行情如何,同花順又有哪些特別的分析工具或指標能幫助投資者更好把握市場趨勢呢?謝謝!
公司回答表示:已將您的意見和建議反饋給產品等相關部門。目前同花順已有“同花順情緒指數”,搜索883404可以查看市場情緒;同花順炒股APP和PC端軟件均有模擬炒股功能,歡迎您使用體驗。
本文源自金融界AI電報
前文的爬蟲都建立在靜態網頁基礎之上,首先通過請求網站url獲取到網頁源代碼。之后對源代碼進行信息提取進而存儲即可,本文則針對動態網頁進行數據采集,首先介紹Ajax相關理論,之后實戰爬取同花順動態網頁,獲取個股相關信息。
1.Ajax簡介
Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創建交互式、快速動態網頁應用的網頁開發技術,無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。通過在后臺與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。
2.Ajax分析
微博網站就是一個比較容易識別的帶有Ajax的動態網頁,首先打開Dectools工具(調至XHR一欄)和中南財經政法大學的官微網站(https://m.weibo.cn/u/1216903164),這里選用的是移動端微博,之后選擇清空所有內容。
接下來滾動滑輪將頁面向下拉,直至清空的XHR一欄出現新的item,點開這個item并選擇Preview欄即可發現這里對應的相應內容即為頁面新出現的微博,而反觀上方網頁鏈接卻沒有變,此時我們即可判定這是一個經過Ajax請求之后的網頁。
3.Ajax提取
還是選擇同樣的條目進入Headers進一步查看信息,可以發現這是一個GET類型的請求,請求url為:https://m.weibo.cn/api/container/getIndex?type=uid&value=1216903164&containerid=1076031216903164&since_id=4479891116113956,即請求的參數有四個:type、value、containerid、since_id,隨后接著翻頁發現除since_id變化外,其余都不變化,這里可知since_id即為翻頁方式。
接下來進一步觀察since_id發現上下請求之間的since_id無明顯規律,進一步查找可知下一頁的since_id在上一頁響應中的cardListInfo里,因此可以建立循環聯系進一步將動態url循環加至爬蟲里。
發起請求獲取響應之后進一步分析,可知響應格式為json,因此進一步對json進行處理即可得最終數據!
1.網頁概覽
有了上文分析之后我們將通過同花順網頁數據采集實戰進行實例驗證。首先打開網頁:http://q.10jqka.com.cn/,如下圖:
進一步按F12鍵打開Devtools后臺源代碼,鼠標放至第一條目右鍵檢查可展現出源代碼中所在位置。
2.Ajax判別
接下來我們通過點擊網頁下方的下一頁,發現網頁url沒有發生任何變化!此時基本可以判定此網頁屬于Ajax動態網頁。
進一步我們清空Network中所有內容,繼續點擊下一頁至第五頁,發現連續彈出三條Name相同內容,可通過General欄獲取到請求的url以及請求頭的具體內容。
因此我們將此請求url復制放至瀏覽器中打開,響應內容果然為標準化表格數據,這正是我們想要的內容。
3.Ajax提取
接著我們同樣打開源代碼,發現為html文檔,表明響應內容為網頁形式,這與上文微博響應json格式不同,因此之后可以通過網頁解析形式獲取數據。
1.網頁獲取
在經過第一部分的理論介紹和第二部分的網頁分析之后我們就可以開始編寫爬蟲代碼了,首先導入庫,并定義請求頭。需要注意一點的是此處的請求頭除User-Agent外還需要host、Referer和X-Requested-With參數,要區分與靜態網頁爬取。
# 導入庫
import time
import json
import random
import requests
import pandas as pd
from bs4 import BeautifulSoup
?
headers={
'host':'q.10jqka.com.cn',
'Referer':'http://q.10jqka.com.cn/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36',
'X-Requested-With':'XMLHttpRequest'
}
url='http://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/%s/ajax/1/' % page_id
res=requests.get(url,headers=headers)
res.encoding='GBK'
2.信息提取
之后就是上文解析庫中的內容,此處采用BaetifulSoup庫更易于理解。先將上文html轉化為BeautifulSoup對象,之后通過對象的select選擇器選擇響應tr標簽內的數據,并進一步解析每一條tr標簽的內容即可得到以下相應信息。
# 獲取單頁數據
def get_html(page_id):
headers={
'host':'q.10jqka.com.cn',
'Referer':'http://q.10jqka.com.cn/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36',
'X-Requested-With':'XMLHttpRequest'
}
url='http://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/%s/ajax/1/' % page_id
res=requests.get(url,headers=headers)
res.encoding='GBK'
soup=BeautifulSoup(res.text,'lxml')
tr_list=soup.select('tbody tr')
# print(tr_list)
stocks=[]
for each_tr in tr_list:
td_list=each_tr.select('td')
data={
'股票代碼':td_list[1].text,
'股票簡稱':td_list[2].text,
'股票鏈接':each_tr.a['href'],
'現價':td_list[3].text,
'漲幅':td_list[4].text,
'漲跌':td_list[5].text,
'漲速':td_list[6].text,
'換手':td_list[7].text,
'量比':td_list[8].text,
'振幅':td_list[9].text,
'成交額':td_list[10].text,
'流通股':td_list[11].text,
'流通市值':td_list[12].text,
'市盈率':td_list[13].text,
}
stocks.append(data)
return stocks
3.保存數據
定義write2excel函數將數據保存至stocks.xlsx文件中。
# 保存數據
def write2excel(result):
json_result=json.dumps(result)
with open('stocks.json','w') as f:
f.write(json_result)
with open('stocks.json','r') as f:
data=f.read()
data=json.loads(data)
df=pd.DataFrame(data,columns=['股票代碼','股票簡稱','股票鏈接','現價','漲幅','漲跌','漲速','換手','量比','振幅','成交額', '流通股','流通市值','市盈率'])
df.to_excel('stocks.xlsx',index=False)
4.循環結構
考慮到同花順多頁結構,同時存在反爬,此處同樣采用字符串拼接和循環結構遍歷多頁股票信息,同時通過random庫中randint方法和time庫的sleep方法間斷一定時長再進行爬取。
def get_pages(page_n):
stocks_n=[]
for page_id in range(1,page_n+1):
page=get_html(page_id)
stocks_n.extend(page)
time.sleep(random.randint(1,10))
return stocks_n
最終的爬取結果如下:
至此同花順動態網頁的爬取完成,再通過此爬蟲總結一下:首先我們通過瀏覽網頁結構和翻頁對比XHR欄對該頁進行Ajax判定,如果網頁url不變且XHR會刷新內容則基本表明為動態網頁,此時我們進一步查看多頁間url請求的異同并找尋規律,規律找到之后即可建立多頁請求流程。之后對單獨一個響應內容進行處理(具體看響應內容的格式),最后建立起整個循環爬蟲結構即可自動化爬取想要的信息。
爬蟲完整代碼可以在頭條號中私信獲得。下文將進一步對瀏覽器模擬行為進行講解和實戰,前文涉及的基礎知識可參考下面鏈接:
爬蟲所要了解的基礎知識,這一篇就夠了!Python網絡爬蟲實戰系列
一文帶你深入了解并學會Python爬蟲庫!從此數據不用愁
Python爬蟲有多簡單?一文帶你實戰豆瓣電影TOP250數據爬?。?/p>
一文弄清Python網絡爬蟲解析庫!內含多個實例講解
機端和電腦端都有比較好用的軟件,但手機端有一些數據圖并不會那么直觀。以海汽集團在同花順中的展示為例。
如果在紅色突破加倉位置買入,在綠色位置賣出,回調到黃色位置時。
在手機端很容易只看分時圖就接回。實際上,手機端也有1分鐘K圖。但大多數用戶手機端看分時圖的還是更多。因為手機端看1分K圖的話太累眼睛。
無論是從買入成本還是 ,圖上虛線貫穿左右的虛線,還是從圖上左側部分歷史走勢的參考,都很容易確認拉升這么多,在黃色區域直接做T買入并不合理。
其實同花順為例電腦端軟件最大的優點還是屏幕夠大,才能讓用戶更直觀,更全面地得到這樣的判斷,進而獲得一個更好的使用體驗。
手機并不是沒用,畢竟是移動設備,手機和電腦結合使用要更好。有條件的話還是要用電腦看的。