主板指數數據的爬取(selenium處理JS)

在進行股票量化分析的時候,尤爲是股票新手,指數型股票是一個簡單而且風險較小的選擇,在對指數分析的時候,一般須要某指數的市盈率,市淨值和股息率。咱們能夠經過對三個指數的歷史數據來量化分析,從而得到或者驗證投資策略。html

可是很差的是,我百度了很久也沒有找出得到歷史數據的途徑,wind資訊的客戶端能夠拿到數據,可是體驗版的無法下載,東方財富的chioce更有須要付費來得到帳號密碼,全部就尷尬了。python

在中證指數的官網上,能夠查到天天收盤後的數據狀況,可是僅僅能得到一天的數據,沒法得到以前的數據。web

因此我就想,能不能把天天的數據都獲取下載,並保存,這樣長期之後,就會獲得不少的歷史數據,能夠用來分析或者提供給須要的朋友。所以初步想法就是固定天天爬取數據,而後儲存下來。windows

首先來看看數據的獲取狀況。app

網站:http://www.csindex.com.cn/zh-CN/downloads/index-information網站

經過初步踩點看網址變化和查看網頁源代碼,能夠得出:
1.網址的連接,在點擊關鍵類別的數據過程當中,沒有發生變化。url

2.經過‘檢查’能夠看到數據,可是網頁源代碼中沒法看到數據。網頁採用了js加載。spa

對策:code

使用selenium訪問網站,將數據浮現出來,而後按照常規方法進行爬取便可。orm

# hanbb
# come on!!!
import re
from selenium import webdriver
from bs4 import BeautifulSoup
import csv
import re
import pandas as pd
from datetime import datetime

today = datetime.now().date().strftime('%Y%m%d')

def data_appear(url):
    #  還原js隱藏的信息
    driver = webdriver.PhantomJS(executable_path="E:\\python\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe")
    driver.get(url)
    data = driver.page_source
    return data

def soup(url):
    soup = BeautifulSoup(data_appear(url),"html.parser")
    tr = soup.find_all('tr')
    return tr

def save(name,list,path):
    text = pd.DataFrame(columns=name,data=list)
    text.to_csv(path)



if __name__ == '__main__':
    url = 'http://www.csindex.com.cn/zh-CN/downloads/index-information'

    # 指數表現 獲取
    zsbx_list = []          # 構建一個大列表存取數據

    for count in range(1,12):  # 經過循環將數據都拿出來
        info = re.findall(r'"(zsbx%s"|zsbx%s cRed"|zsbx%s cls")>(.+?)</td>'%(count,count,count),str(soup(url)))   # 正則提取

        list = []
        for i in info:
            list.append(i[1])
        zsbx_list.append(list)
    # 存儲準備   
    name = ['指數簡稱','收盤','日漲跌','日漲跌幅(%)','今年以來漲跌','今年以來漲跌幅(%)','成交額較昨日增減(億元)','成交額較昨日增減(%)']
    path_zsbx="E:\\indexdate\\{}zsbx.csv".format(today)
    save(name=name,list=zsbx_list,path=path_zsbx)
    print('數據存入成功')


# 指數估值
list_zsgz = []
for count_zsgz in range(1,12):
    info_zsgz = re.findall(r'"zsgz%s">(.+?)</td>'%count_zsgz,str(soup(url)))
    list_zsgz.append(info_zsgz)
    #print(info_zsgz)
#print(list_zsgz)
name_zsgz = ['指數簡稱','靜態市盈率','滾動市盈率','市淨率','股息率','去年末靜態市盈率','去年末滾動市盈率','去年末市淨率']
path_zsgz = "E:\\indexdate\\{}zsgz.csv".format(today)
save(name_zsgz,list_zsgz,path_zsgz)
print('指數估值的數據存入成功')
相關文章
相關標籤/搜索