1.获取所有股票的代码
代码作为股票数据的唯一标识符号,作为重要传输参数.
在数据中心,发现资金流向会覆盖所有的股票代码,网址如下:
https://data.eastmoney.com/zjlx/detail.html
重复上篇文章的处理过程获取要传输的关键参数,这里我们将cb 这个参数去掉后,发现不影响数据结果,并且数据可以直接使用json 加载. feilds这个参数代表要请求的数据列有哪些,我们仅保留了f12: 代码code和 f14:名称name
import requests
import pandas as pd
import json
#url = 'https://datacenter.eastmoney.com/stock/selection/api/data/get/
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
url ='https://push2.eastmoney.com/api/qt/clist/get/'
#secid 股票id
param ={
'fid': 'f62',
'po': '1',
'pz': '5000',
'pn': '1',
'np': '1',
'fltt': '2',
'invt': '2',
'fs': 'm:0+t:6+f:!2,m:0+t:13+f:!2,m:0+t:80+f:!2,m:1+t:2+f:!2,m:1+t:23+f:!2,m:0+t:7+f:!2,m:1+t:3+f:!2',
'fields': 'f12,f14',
}
resp = requests.get(url = url,params = param ,headers = headers)
res =resp.text
print(res)
print(type(res))
rrr =json.loads(res)
t1= rrr['data']['diff']
df = pd.DataFrame(t1)
print(df)
2.获取所有板块的代码 (技术代码同上)
import requests
import pandas as pd
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
url ='https://push2.eastmoney.com/api/qt/clist/get'
param ={
'po': '1',
'pz': '500',
'pn': '1',
'np': '1',
'fields':'f12,f14',
'fid': 'f62',
'fs':'m:90+t:2',
}
resp = requests.get(url = url,params = param ,headers = headers)
res =resp.text
print(res)
print(type(res))
print(resjson[0])
rrr =json.loads(res)
t1= rrr['data']['diff']
df = pd.DataFrame(t1)
print(df)
3.从其他财经网 获得中证500 成分股
上篇我们获取了具有代表性的沪深300,另一个具有代表性的是中证500,两个模块的成分股没有重复…奈何在分析过程中,东方财富网没有找到中证500成分股.找到下面网站,发现中证500成分股,数据列还挺多.
GET请求获取到的不是结构化的数据,而是直接得到一个asp网页,这里传参部分,我们直接跳过,重点分析获取关键数据.
import requests
import pandas as pd
#url = 'https://datacenter.eastmoney.com/stock/selection/api/data/get/
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
url ='http://www.shdjt.com/flsort.asp?lb=399905'
resp = requests.get(url = url,headers = headers)
res =resp.text
print(res)
不使用beautifulsoup lxml 等解析库的话,根据万能的正则表达式可以获取到网页中的任意数据.
分析网页内容后发现 表格没行都会有一个 HTML标签,
- .*? 表示惰性匹配
- \d{6} 表示6位数字
- 参数re.S 可以忽略网页中的换行符等
- (?P
\d{6}) 表示对获取到的内容进行命名,命名为code
import re
# ppp = re.compile(r'<tr height="25">.*?gpdm=(?P<code>\d{6}) ',re.S) (?P<name>)</a>
ppp = re.compile(r'<tr height="25">.*?gpdm=(?P<code>\d{6})">(?P<name>.*?)</a>',re.S)
result = ppp.finditer(res)
print(result)
print(type(result))
code=[]
name=[]
for i in result:
code.append(i.group("code"))
name.append(i.group("name"))
df = pd.DataFrame()
df['code'] =code
df['name'] =name
print(df)
df.to_csv('中证500.csv',encoding='gbk')