前言
我们知道,在获取集思录的可转债数据时,如果没有登陆,最多只能获取 30 条数据。但是,使用 cookie 的方法需要经常更改 cookie,因为集思录会定期更新 cookie,这非常麻烦。
为了避免这种情况,我们可以使用 selenium 包进行自动登陆和获取 cookie。
因此,下面的代码是基于 selenium 实现的。
需要修改的地方
在运行代码之前,需要将代码中的“填入账号”和“填入密码”替换为集思录账号和密码。
此外,提供的代码使用的是 Edge 浏览器,如果使用其他浏览器,需要下载相应的浏览器驱动程序。如果不知道如何操作,可以在网上搜索相关教程,或者查看我的视频或文章中的内容。
最后,如果只是测试代码的运行情况,可以打开浏览器。如果不需要打开浏览器,可以将打开浏览器的代码注释掉。
代码
import akshare as akimport timeimport pandas as pdfrom selenium import webdriverfrom selenium.webdriver import Edgefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.edge.service import Serviceimport requests# 通过集思录api获取可转债数据def get_jsl_data():# 不打开浏览器options = webdriver.EdgeOptions()options.add_argument('headless')options.add_argument('disable-gpu')service = Service('C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe')web = webdriver.Edge(service=service, options=options)# 打开浏览器# web = webdriver.Edge()# 登陆web.get('https://www.jisilu.cn/account/login/') # 打开登陆页web.find_element(By.XPATH,'/html/body/div[3]/div/div/div[1]/div[1]/div[3]/form/div[2]/input').send_keys('填入账号') # 填入账号web.find_element(By.XPATH,'/html/body/div[3]/div/div/div[1]/div[1]/div[3]/form/div[3]/input').send_keys('填入密码') # 填入密码web.find_element(By.XPATH,'/html/body/div[3]/div/div/div[1]/div[1]/div[3]/form/div[5]/div[1]/input').click() # 勾选记住我web.find_element(By.XPATH,'/html/body/div[3]/div/div/div[1]/div[1]/div[3]/form/div[5]/div[2]/input').click() # 勾选条款web.find_element(By.XPATH,'/html/body/div[3]/div/div/div[1]/div[1]/div[3]/form/div[6]/a').click() # 点击登陆time.sleep(0.2)# 登陆后要爬取https://www.jisilu.cn/data/cbnew/cb_list_new/的数据,修改下面代码web.get('https://www.jisilu.cn/data/cbnew/cb_list_new/')# 获取cookiecookie = web.get_cookies()# 关闭浏览器web.quit()headers_jsl={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110Safari/537.36','Cookie': '; '.join([str(x['name']) + '=' + str(x['value']) for x in cookie])url='https://www.jisilu.cn/data/cbnew/cb_list_new/'response = requests.get(url,headers=headers_jsl)data = response.json()df = pd.DataFrame(data["rows"])["cell"].apply(pd.Series)df = df.rename(columns={"bond_id": "代码","bond_nm": "转债名称","price": "现价","increase_rt": "涨跌幅","stock_id": "正股代码","stock_nm": "正股名称","sprice": "正股价","sincrease_rt": "正股涨跌","pb": "正股PB","convert_price": "转股价","convert_value": "转股价值","premium_rt": "转股溢价率","dblow": "双低","rating_cd": "评级","put_convert_price": "回售触发价","force_redeem_price": "强赎触发价","convert_amt_ratio": "转债流通市值占比","maturity_dt": "到期时间","year_left": "剩余年限","curr_iss_amt": "剩余规模-亿","volume": "成交额-万","turnover_rt": "换手率","ytm_rt": "到期税前收益","real_force_redeem_price": "实时赎回价","ref_yield_info": "纯债价值","option_tip": "期权价值"}, # 对索引进行重命名# df = df.drop(columns=['id']) # 删除特定的列df = df["代码","转债名称","现价","涨跌幅","正股代码","正股名称","正股价","正股涨跌","正股PB","转股价","转股价值","转股溢价率","双低","评级","回售触发价","强赎触发价","转债流通市值占比","到期时间","剩余年限","剩余规模-亿","成交额-万","换手率","到期税前收益","实时赎回价","纯债价值","期权价值"] # 保留的数据return dfprint(get_jsl_data())get_jsl_data().to_csv('可转债.csv', index=False)
热门跟贴