# -*- 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)