python如何爬虫股票数据_简单爬虫:东方财富网股票数据爬取(python_017)
需求:將東方財富網行情中心的股票數據爬取下來,包括上證指數、深圳指數、上證A股、深圳A股、新股、中小板、創業板 等
一、目標站點分析
東方財富網的行情中心頁面包含了所有股票信息。在左側的菜單欄中包含了滬深個股、滬深指數等所有股票數據。每個板塊的股票數據被隱藏在不同的菜單里。
點擊“滬深個股”按鈕,對應的股票數據就被查詢出來了。上方的選項卡中包含了不同板塊的板塊:滬深A股、上證A股、深證A股、新股、中小板...
我們的需求就是將各個選項卡下面的股票數據全部爬取下來,并分別用Excel保存到本地。
首先,通過查看源代碼,發現頁面上的數據并不是table格式,在源代碼中搜索想要的數據并不能直接找到。
所以,老規矩:谷歌或者火狐瀏覽器 - F12 鍵,進行抓包分析。看看這些數據是怎么加載出來的。
1、提取url,獲取單頁數據
點擊“js“,直接過濾出js文件,很容易就找到了股票數據。
#滬深A股
url = "http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?cb=jQuery112404462275420342996_1542343049719&type=CT&token=4f1862fc3b5e77c150a2b985b12db0fd&sty=FCOIATC&js=(%7Bdata%3A%5B(x)%5D%2CrecordsFiltered%3A(tot)%7D)&cmd=C._A&st=(ChangePercent)&sr=-1&p=1&ps=20&_=1542343050897"
服務器的訪問形式:get。
那么就相對簡單了,直接通過requests庫的get就可以直接加載數據。
對應的文件數據如下:
提取數據
單只股票的數據都以字符串的形式被存放在“data”下面。可以直接通過正則表達式將data里面的數據提取出來即可。
2、實現翻頁
對URL進行分析,控制翻頁的參數主要是p參數,所以只要用一個page變量來替代頁碼,構造新的URL,再通過for循環就能實現提取多頁數據。
3、獲取不同板塊的股票數據
對滬深A股、上證A股、深證A股、新股、中小板...不同板塊對URL進行分析,發現對應鏈接非常相似,唯一對差別是cmd參數。
可以通過構造一個列表或字典,將不同板塊對數據一次性提取。
4、將數據保存到本地。
通過導入pandas庫,將數據存放在數據框,通過to_excel( )方法保存到本地。
代碼執行結果如下:
完整源代碼:
'''數據來源:東方財富網-行情中心http://quote.eastmoney.com/center'''
import requests
import re
import pandas as pd
#用get方法訪問服務器并提取頁面數據
def getHtml(cmd,page):
url = "http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?cb=jQuery112406115645482397511_1542356447436&type=CT&token=4f1862fc3b5e77c150a2b985b12db0fd&sty=FCOIATC&js=(%7Bdata%3A%5B(x)%5D%2CrecordsFiltered%3A(tot)%7D)&cmd="+cmd+"&st=(ChangePercent)&sr=-1&p="+str(page)+"&ps=20"
r = requests.get(url)
pat = "data:\[(.*?)\]"
data = re.compile(pat,re.S).findall(r.text)
return data
#獲取單個頁面股票數據
def getOnePageStock(cmd,page):
data = getHtml(cmd,page)
datas = data[0].split('","')
stocks = []
for i in range(len(datas)):
stock = datas[i].replace('"',"").split(",")
stocks.append(stock)
return stocks
def main():
cmd = {
"上證指數":"C.1",
"深圳指數":"C.5",
"滬深A股":"C._A",
"上證A股":"C.2",
"深圳A股":"C._SZAME",
"新股":"C.BK05011",
"中小板":"C.13",
"創業板":"C.80"
}
for i in cmd.keys():
page = 1
stocks = getOnePageStock(cmd[i],page)
#自動爬取多頁,并在結束時停止
while True:
page +=1
if getHtml(cmd[i],page)!= getHtml(cmd[i],page-1):
stocks.extend(getOnePageStock(cmd[i],page))
#print(i+"已加載第"+str(page)+"頁")
else:
break
df = pd.DataFrame(stocks)
#提取主要數據/提取全部數據
#df.drop([0,14,15,16,17,18,19,20,21,22,23,25],axis=1,inplace=True)
columns = {1:"代碼",2:"名稱",3:"最新價格",4:"漲跌額",5:"漲跌幅",6:"成交量",7:"成交額",8:"振幅",9:"最高",10:"最低",11:"今開",12:"昨收",13:"量比",24:"時間"}
df.rename(columns = columns,inplace=True)
df.to_excel("股票/"+i+".xls")
print("已保存"+i+".xls")
main()
總結
以上是生活随笔為你收集整理的python如何爬虫股票数据_简单爬虫:东方财富网股票数据爬取(python_017)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mq3.8.9版本有什么不同_Pytho
- 下一篇: vue cli 4 多环境_Vue 前端