需求:从网上爬取的数据,如果本地没有文件,则新建文件并写入,如果本地有文件,则从爬取的数据中筛选掉已有数据,剩下更新的数据写入文件(追加更新)
问题:爬取的数据(已清洗过)与本地读取的数据合并后,相同(内容相同,格式也转化一致)的数据并没有出现both,所以导致无法筛选出更新数据,问题出在哪儿
list_name = []
list_date = []
list_funds = []
filepath = './plate.csv'
for i in list_plate:
headers_detail = {
'Host': 'xxxxxxx',
'Referer': f'https://yyyyyy.com/{i}.html',
'User-Agent': 'xxxxxxx'
}
params = {
'xx': 'xxx'
}
res = requests.get(url, headers=headers_detail, params=params).text
pat_klines = '"klines":(.*?)}'
klines = re.compile(pat_klines).findall(res)[0]
lists = ast.literal_eval(klines)
for j in lists:
pat_name = '"name":"(.*?)"'
name = re.compile(pat_name).findall(res)[0].replace(' ', '')
list_name.append(name)
x = j.split(',')
date = x[0].replace(' ', '')
list_date.append(date)
funds_main = int(x[1].replace('.0', '').replace(' ', ''))
list_funds.append(funds_main)
data = {
'板块名称': list_name,
'日期': list_date,
'主力资金': list_funds_main
}
df = pd.DataFrame(data).drop_duplicates()
df['主力资金'] = np.array(df['主力资金']).astype(int)
df['日期'] = np.array(df['日期']).astype(str)
df['板块名称'] = np.array(df['板块名称']).astype(str)
# df['日期'] = pd.to_datetime(df['日期'], format='%Y-%m-%d').dt.strftime('%Y/%m/%d')
key_columns = ['板块名称', '日期', '主力资金']
if not os.path.exists(filepath):
df.to_csv(filepath, index=False, encoding='GBK')
else:
existing_data = pd.read_csv(filepath, encoding='GBK').drop_duplicates()
existing_data['主力资金'] = np.array(existing_data['主力资金']).astype(int)
existing_data['日期'] = np.array(existing_data['日期']).astype(str)
existing_data['板块名称'] = np.array(existing_data['板块名称']).astype(str)
new_data = pd.merge(df, existing_data, on=key_columns, how='outer', indicator=True)
new_data = new_data[new_data['_merge'] == 'left_only']
new_data = new_data.drop(columns='_merge', axis=1)
print(new_data )