import os import django # 设置DJANGO_SETTINGS_MODULE环境变量 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test_Bootstrap.settings') # 将'test_Bootstrap'替换为你的项目名称 # 初始化Django设置 django.setup() from app_test.user_agents_pool import agent_list # 使用绝对导入来导入模型 from app_test.models import StockData import pandas as pd import requests import time import random import re from datetime import date # from .models import StockData class GetYaoqiGupiao(object): user_Agent = random.choice(agent_list) def __init__(self): self.headers = { 'user-agent': self.user_Agent } def get_content(self,id,start_time,end_time): url = f'https://q.stock.sohu.com/hisHq?code=cn_{id}&start={start_time}&end={end_time}&stat=1&order=D&period=d&callback=historySearchHandler&rt=jsonp&r=0.44942133747295787&0.3001773339487177' data_all = [] # 爬取医药股票历史数据 res = requests.get(url, headers=self.headers) # 设置3秒休眠时间 time.sleep(3) html = res.content.decode("gb2312") html = html.replace('historySearchHandler', '') info_list = re.findall(r'\["202\d+.*?"\]', html, re.S) datas = [] for info in info_list: number_list = re.findall(r'"(.*?\d+.*?)"',info,re.S) date = number_list[0] shoupan = number_list[1] datas.append([date, float(shoupan)]) df = pd.DataFrame(datas, columns=['date', '收盘']) return df def get_stock_data(): # 选用两只和布洛芬相关的股票数据 id_list = {'301075':'多瑞医药','301211':'亨迪药业'} today = str(date.today()).replace('-', '') getyaoqigupiao = GetYaoqiGupiao() df1 = getyaoqigupiao.get_content('301075','20230201',today) df2 = getyaoqigupiao.get_content('301211','20230201',today) merged_df = df1.merge(df2,on = 'date',how = 'inner')#取交集 merged_df['stock_data'] = (merged_df['收盘_x']+merged_df['收盘_y'])/2 data = merged_df[['date','stock_data']] data_list = data.values.tolist() data_list = list(reversed(data_list)) print(data_list) for data in data_list: obj, created =StockData.objects.get_or_create(date=data[0], defaults={'shoupan': data[1]}) if created: print(f"Added new record for date {data[0]} with infections {data[1]}") else: print(f"Record for date {data[0]} already exists.") # get_stock_data()