爬取url:https://finance.sina.com.cn/realstock/company/sh600835/nc.shtml
要求
js调试文件和怎么找到加密数据的截几张步骤
说明图,一起压缩发到这个邮箱,这个邮箱是yx13235480522@163.com
我估计你是理解错了,你需要的数据并不需要解密js,现在给一个解决方案,你可以直接用:
基本思路是:csv文件不存在则创建带表头的csv文件,然后读取成dadaframe数据,通过接口读取你需要的数据,解析后存到dadaframe中,其中我增加了时间判断,只有在开盘时间段内读取的数据才会存起来,如果时间过了下午3点,则停止程序,如果要读取多天数据,可以在第二天9点前再运行程序,数据格式参考表头设计。
import requests
import execjs
import pandas as pd
import os
import time
import numpy as np
from datetime import datetime as dt
filename = 'shjd.csv' #定义存储文件名称,建议每个时间段存为不同的名称,后期再合并,可以防止数据丢失
if not os.path.exists(filename): #判断文件是否存在,不存在则创建
#创建df文件,添加表头
df = pd.DataFrame(columns=['时间','成交价',
'卖⑤(成交价)', '卖⑤(成交量)',
'卖④(成交价)', '卖③(成交量)',
'卖③(成交价)', '卖②(成交量)',
'卖②(成交价)', '卖①(成交量)',
'卖①(成交价)', '卖①(成交量)',
'买⑤(成交价)', '买⑤(成交量)',
'买④(成交价)', '买④(成交量)',
'买③(成交价)', '买③(成交量)',
'买②(成交价)', '买②(成交量)',
'买①(成交价)', '买①(成交量)'])
df.index.name = '序号' #指定索引列名称
df.to_csv(filename,encoding='GBK') #保存csv文件
df = pd.read_csv(filename,index_col='序号',encoding='GBK') #读取csv文件
index = df.index #读取索引
codes = "sh600835,sh600835_i,sh900925,RMBUSD,bk_new_jtys" #股票代码
headers = {'referer': 'http://finance.sina.com.cn'} #设置请求头
t = time.time() #计算当前时间
try:
while True:
resp = requests.get('http://hq.sinajs.cn/list=' + codes, headers=headers, timeout=6) #发送请求,获取数据
data = resp.text #取返回数据的内容
docjs = execjs.compile(data) #用execjs编译返回的js代码
res = docjs.eval('hq_str_sh600835') #取js代码中的hq_str_sh600835变量数据
infos = res.split(',') #分割数据
datetime = infos[-4]+' '+infos[-3] #取时间数据组成数据时间
#判断当前时间是否开盘
if dt.strptime(infos[-4]+' 09:00:00', '%Y-%m-%d %H:%M:%S')<dt.now()<dt.strptime(infos[-4]+' 11:30:00', '%Y-%m-%d %H:%M:%S') or dt.strptime(infos[-4]+' 13:00:00', '%Y-%m-%d %H:%M:%S')<dt.now()<dt.strptime(infos[-4]+' 15:00:00', '%Y-%m-%d %H:%M:%S'):
data = infos[-24:-4] #取买卖数据
data = data[::-1] #反序
data = [round(float(data[i]), 2) if i%2==0 else int(data[i])//100 for i in range(len(data))] #成交价保留两位小数,成交数量除以100
row = np.hstack(([datetime, round(float(infos[7]),2)],data)) #把时间,成交数据,以及买卖数据组成一个数组
df.loc[df.iloc[:,0].size] = row #在df数据中添加一行
if time.time()-t>600: #每隔10分钟存一次数据
df.to_csv(filename,encoding='GBK')
t = time.time()
time.sleep(3) #等待3秒
if dt.now()>dt.strptime(infos[-4]+' 15:00:00', '%Y-%m-%d %H:%M:%S'): #如果时间到了下午15点以后,存储数据,并停止程序
df.to_csv(filename,encoding='GBK')
break
except: #如果中途停止程序或者程序出错,保存当前数据
df.to_csv(filename,encoding='GBK')