# -*- coding:utf-8 -*- import json import requests import csv import re from lxml import etree import datetime import pandas as pd def get_dat(): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36", } newUrl ="https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=LST___t=1584777951900" #最简单的爬虫请求.也可以加上headers字段,防止部分网址的反爬虫机制 response = requests.get(newUrl) #当爬取的界面需要用户名密码登录时候,构建的请求需要包含auth字段 data = response.content.decode("utf-8") dat = json.loads(data) # 所有数据 lst_data = [] for one in dat['rows']: # 每一条数据 lst_dat = [] # 转债id id = one["id"] dat_cell = one["cell"] # 转债名称 name = dat_cell['bond_nm'] #股票名称 stock_nm = dat_cell['stock_nm'] # 现价 price = dat_cell['price'] # 溢价率 premium_rt = dat_cell['premium_rt'] # 评级 rating_cd = dat_cell['rating_cd'] # 回售触发价 put_convert_price = dat_cell['put_convert_price'] # 强赎触发价 force_redeem_price = dat_cell['force_redeem_price'] # 剩余时间 last_time = dat_cell['year_left'] # 双低 dblow = dat_cell['dblow'] #剩余规模 curr_iss_amt=dat_cell['curr_iss_amt'] #成交额 volume=dat_cell['volume'] #换手率 turnover_rt = dat_cell['turnover_rt'] #到期收益 ytm_rt_tax = dat_cell['ytm_rt_tax'] #下修次数 adj_cnt = dat_cell['adj_cnt'] # 统计日期 tjrq = datetime.date.today().__format__('%Y-%m-%d') lst_dat.append(id) lst_dat.append(name) lst_dat.append(stock_nm) lst_dat.append(price) lst_dat.append(premium_rt) lst_dat.append(rating_cd) lst_dat.append(put_convert_price) lst_dat.append(force_redeem_price) lst_dat.append(last_time) lst_dat.append(dblow) lst_dat.append(curr_iss_amt) lst_dat.append(volume) lst_dat.append(turnover_rt) lst_dat.append(ytm_rt_tax) lst_dat.append(adj_cnt) lst_dat.append(tjrq) lst_data.append(lst_dat) return lst_data def wirte_csv(data): # 1. 创建文件对象 tjrq2 = datetime.date.today().__format__('%Y-%m-%d') c_name ="可转债"+ tjrq2 + ".csv" f = open(c_name, 'w', encoding='gbk', newline='') # 2. 基于文件对象构建 csv写入对象 csv_writer = csv.writer(f) # 3. 构建列表头 csv_writer.writerow(["代 码", "转债名称","股票名称", "现 价", "溢价率", "评级", "回售触发价", "强赎触发价", "剩余年限", "双低", "剩余规模","成交额","换手率","到期收益","下修次数","统计日期"]) # 4. 写入csv文件内容 for dat in data: csv_writer.writerow(dat) # 5. 关闭文件 f.close() if __name__ == '__main__': data = get_dat() wirte_csv(data) # df = pd.DataFrame(data) # print(df)