上期内容讲解了宁稳网数据获取的方法(用于初步计算未上市可转债价格),具体方法参考第一期:可转债代码交流第一期:利用Python获取宁稳网数据(包含基本的环境搭建与Python编辑器安装方法)

本人并非计算机专业出身,所有python知识均为自学,所写代码如有不规范的地方,还望指正。

废话不多说,直接上代码!

第一步:导入库(导入各个模块,为了让代码成功运行)ps:所有的库安装好之后先导入下试试,测试下是否安装成功(导入模块跟上期内容一样)

import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import pandas as pd

第二步:编写数据获取函数Thelogin2()1.准备工作,配置运行环境(集思录需要登录(非会员版)才能获取完整的数据)ps:集思录网站第一次登录不需要进行图片验证(省了很多事情),输入账号密码即可

# 设置函数,为了设置运行参数
chrome_options = Options()
# 输入你的账号
account = '135*****907'
# 输入你的密码
password1 = '1********q'
# 设置目标网址,开头的f可不加
url =f'https://www.jisilu.cn/web/data/cb/list'
# 增加无头(不打开浏览器)
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 防止被网站识别(伪装)
chrome_options.add_experimental_option('excludeSwitches',['enable-automation'])
#打开网页不加载图片
prefs = {
'profile.default_content_setting_values': {'images': 2
}}
chrome_options.add_experimental_option('prefs', prefs)
# 将设置的参数传入,运行浏览器驱动,并且运行Chrome浏览器
browser = webdriver.Chrome(chrome_options = chrome_options)
browser.get(url)#打开网址
#browser.maximize_window()#窗口最大化
browser.implicitly_wait(5)
time.sleep(1)#等待

2.模拟登录,利用selenium自动输入账号密码,勾选同意选项并点击登录按钮

#点击登录按钮输入账号密码
buttons1 = browser.find_elements_by_xpath('//button[@type="button"][1]')
button1 = buttons1[0]
browser.execute_script("arguments[0].click();", button1)
time.sleep(0.5)
#输入账号密码
button2 = browser.find_element_by_xpath('//input[@name="user_name"]')
browser.execute_script("arguments[0].click();", button2)
button2.send_keys(account)#输入账号信息
button3 = browser.find_element_by_xpath('//input[@name="password"]')
browser.execute_script("arguments[0].click();", button3)
button3.send_keys(password1)#输入密码信息
time.sleep(0.5)
#勾选同意
button4 = browser.find_element_by_xpath('//span[@class="agree_text"]')
browser.execute_script("arguments[0].click();", button4)
#点击登录
buttons2 = browser.find_elements_by_xpath('//a[@class="btn btn-jisilu"]')
button5 = buttons2[0]
browser.execute_script("arguments[0].click();", button5)
browser.implicitly_wait(5)

3.获取页面下所有可转债的所需信息

代码中获取的列只是集思录列表中的部分数据,大家可根据自己的需求进行添加或删除。

非会员版集思录一行有33列数据。

#创建列表,用于存储不同的列信息
list_all = []
list_code = []#可转债代码
list_name = []#可转债名称
list_compay = []#公司名称
list_price = []#现价
list_premium = []#溢价率
list_remaininglife = []#剩余年限
list_yield = []#税前收益率
list_rating = []#评级
list_size = []#剩余规模
list_Turnover = []#换手率
list_Convertible = []#转股价值#获取所有可转债的溢价率
buttonss2 = browser.find_elements_by_xpath('//span[contains(@title,"开始转股")] ')
for i in buttonss2:itext = i.text #获通过.text进行转义list_premium.append(itext)
#print(list_premium)
print("登录成功!")
#获取所有可转债的剩余年限、税前收益率、评级等信息
buttonss3 = browser.find_elements_by_xpath('//td')
for i in buttonss3:itext = i.textlist_all.append(itext)
#计算数据总行数(python索引从0开始计算)
lenghtll =len(list_all) - 1
#print(lenghtll)
i = 0
#下方可根据自己需求更改获取的列数据,每一个i前面+的数值就是对应第几列数据
#列索引是从0开始的,所以可转债代码是第2列数据
while i < lenghtll:list_code.append(list_all[2+i])#转债代码if list_all[3+i][-1] == "!":list_all[3+i] = list_all[3+i].strip("!")list_name.append(list_all[3+i])#转债名称list_price.append(list_all[4+i])#现价list_compay.append(list_all[7+i])#公司名称list_Convertible.append(list_all[12+i])#转股价值list_rating.append(list_all[16+i])#评级list_remaininglife.append(list_all[24+i])#剩余年限list_size.append(list_all[25+i])#剩余规模list_Turnover.append(list_all[27+i])#换手率list_yield.append(list_all[28+i])#收益率i += 30      #目前非会员版的用户数据有30列,注意集思录数据总列的变化!!!

4.将获取到的数据进行整理,合成表格数据,方便阅读

#创建字典,用于数据存储,方便格式转换
dict_all = {}
dict_all["转债代码"]=list_code
dict_all["转债名称"]=list_name
dict_all["现价"]=list_price
dict_all["公司名称"]=list_compay
dict_all["评级"]=list_rating
dict_all["溢价率"]=list_premium
dict_all["税前收益"]=list_yield
dict_all["剩余年限"]=list_remaininglife
dict_all["剩余规模"]=list_size
dict_all["转股价值"]=list_Convertible
dict_all["换手率"]=list_Turnover
#重新调整列名顺序
list_columns = ["转债代码","转债名称","公司名称","现价","评级","溢价率","税前收益","剩余年限","剩余规模","转股价值","换手率"]
#将获取的数据转成DataFrame格式(表格)
df_data = pd.DataFrame(dict_all,columns = list_columns)#去除可交换可转债
criteria11 = df_data['转债名称'].map(lambda x:'EB'not in x)
df_data = df_data[criteria11]
#去除快到期的可转债
criteria22 = df_data['剩余年限'].map(lambda x:'-'not in x)
df_data = df_data[criteria22]#将价格、剩余规模、赎回价和换手率转换为数值类型
df_data.loc[:,['现价','剩余年限','转股价值','剩余规模']]= df_data.loc[:,['现价','剩余年限','转股价值','剩余规模']].apply(pd.to_numeric)df_data['溢价率'] = df_data['溢价率'].str.strip('%')#去除“%”
df_data['溢价率'] = pd.to_numeric(df_data['溢价率'],errors = 'coerce')
df_data['税前收益'] = df_data['税前收益'].str.strip('%')
df_data['税前收益'] = pd.to_numeric(df_data['税前收益'],errors = 'coerce')df_data['换手率'] = df_data['换手率'].str.strip('%')
df_data['换手率'] = pd.to_numeric(df_data['换手率'],errors = 'coerce')#利用judgee函数进行可转债类型分类,将三类可转债(进攻、平衡和防守)进行标注
list1 = df_data.apply(judgee,axis = 1)
df_data['type'] = list1df_data2 = df_data.copy()print("集思录基础页信息已爬取完毕!")

5.退出设置

time.sleep(1)#等待
browser.close()#关闭当前网页
browser.quit()#完全退出浏览器
return df_data2#返回数据

6.三类可转债标记函数编写

#自定义函数:平衡型可转债编号为‘1’,进攻型编号为‘2’,防守型编号为‘3’
#下方的筛选条件可更改,以下数值是本人目前所用数值
def judgee(df_data) :if (df_data['税前收益'] > 1) & (df_data['溢价率'] < 5):return '平衡型'elif df_data['溢价率'] < 0:return '进攻型'elif df_data['税前收益'] > 6:return '防守型'else:return '0'

第三步:调用数据获取函数

df_data2 = Thelogin2()

完整代码如下:

import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import pandas as pd#集思录爬取可转债信息并筛选#自定义函数:平衡型可转债编号为‘1’,进攻型编号为‘2’,防守型编号为‘3’
def judgee(df_data) :if (df_data['税前收益'] > 1) & (df_data['溢价率'] < 5):return '平衡型'elif df_data['溢价率'] < 0:return '进攻型'elif df_data['税前收益'] > 6:return '防守型'else:return '0'def Thelogin2():#集思录获取可转债信息wait_time = 180chrome_options = Options()# 这边的账号密码改成自己的账号密码!!!account = '135******7'password1 = '1*******q'url =f'https://www.jisilu.cn/web/data/cb/list'# 增加无头(不打开浏览器)chrome_options.add_argument('--headless')chrome_options.add_argument('--disable-gpu')# 防止被网站识别(伪装)chrome_options.add_experimental_option('excludeSwitches',['enable-automation'])#打开网页不加载图片prefs = {'profile.default_content_setting_values': {'images': 2}}chrome_options.add_experimental_option('prefs', prefs)browser = webdriver.Chrome(chrome_options = chrome_options)browser.get(url)#打开网址browser.maximize_window()#窗口最大化browser.implicitly_wait(5)time.sleep(1)#等待#点击登录按钮输入账号密码buttons1 = browser.find_elements_by_xpath('//button[@type="button"][1]')button1 = buttons1[0]browser.execute_script("arguments[0].click();", button1)time.sleep(0.5)#输入账号密码button2 = browser.find_element_by_xpath('//input[@name="user_name"]')browser.execute_script("arguments[0].click();", button2)button2.send_keys(account)#输入信息button3 = browser.find_element_by_xpath('//input[@name="password"]')browser.execute_script("arguments[0].click();", button3)button3.send_keys(password1)#输入信息time.sleep(0.5)#勾选同意button4 = browser.find_element_by_xpath('//span[@class="agree_text"]')browser.execute_script("arguments[0].click();", button4)#登录buttons2 = browser.find_elements_by_xpath('//a[@class="btn btn-jisilu"]')button5 = buttons2[0]browser.execute_script("arguments[0].click();", button5)browser.implicitly_wait(5)list_all = []list_code = []#可转债代码list_name = []#可转债名称list_compay = []#公司名称list_price = []#现价list_premium = []#溢价率list_remaininglife = []#剩余年限list_yield = []#税前收益率list_rating = []#评级list_size = []#剩余规模list_Turnover = []#换手率list_Convertible = []#转股价值#获取所有可转债的溢价率buttonss2 = browser.find_elements_by_xpath('//span[contains(@title,"开始转股")] ')for i in buttonss2:itext = i.textlist_premium.append(itext)#print(list_premium)print("登录成功!")#获取所有可转债的剩余年限、税前收益率、评级等信息buttonss3 = browser.find_elements_by_xpath('//td')for i in buttonss3:itext = i.textlist_all.append(itext)lenghtll =len(list_all) - 1#print(lenghtll)i = 0while i < lenghtll:list_code.append(list_all[2+i])#转债代码if list_all[3+i][-1] == "!":list_all[3+i] = list_all[3+i].strip("!")list_name.append(list_all[3+i])#转债名称list_price.append(list_all[4+i])#现价list_compay.append(list_all[7+i])#公司名称list_Convertible.append(list_all[12+i])#转股价值list_rating.append(list_all[16+i])#评级list_remaininglife.append(list_all[24+i])#剩余年限list_size.append(list_all[25+i])#剩余规模list_Turnover.append(list_all[27+i])#换手率list_yield.append(list_all[28+i])#收益率i += 30                                     #注意集思录数据总列的变化!!!dict_all = {}dict_all["转债代码"]=list_codedict_all["转债名称"]=list_namedict_all["现价"]=list_pricedict_all["公司名称"]=list_compaydict_all["评级"]=list_ratingdict_all["溢价率"]=list_premiumdict_all["税前收益"]=list_yielddict_all["剩余年限"]=list_remaininglifedict_all["剩余规模"]=list_sizedict_all["转股价值"]=list_Convertibledict_all["换手率"]=list_Turnoverlist_columns = ["转债代码","转债名称","公司名称","现价","评级","溢价率","税前收益","剩余年限","剩余规模","转股价值","换手率"]df_data = pd.DataFrame(dict_all,columns = list_columns)#去除可交换可转债criteria11 = df_data['转债名称'].map(lambda x:'EB'not in x)df_data = df_data[criteria11]#去除快到期的可转债criteria22 = df_data['剩余年限'].map(lambda x:'-'not in x)df_data = df_data[criteria22]#将价格、剩余规模、赎回价和换手率转换为数值类型df_data.loc[:,['现价','剩余年限','转股价值','剩余规模']]= df_data.loc[:,['现价','剩余年限','转股价值','剩余规模']].apply(pd.to_numeric)df_data['溢价率'] = df_data['溢价率'].str.strip('%')df_data['溢价率'] = pd.to_numeric(df_data['溢价率'],errors = 'coerce')df_data['税前收益'] = df_data['税前收益'].str.strip('%')df_data['税前收益'] = pd.to_numeric(df_data['税前收益'],errors = 'coerce')df_data['换手率'] = df_data['换手率'].str.strip('%')df_data['换手率'] = pd.to_numeric(df_data['换手率'],errors = 'coerce')list1 = df_data.apply(judgee,axis = 1)df_data['type'] = list1df_data2 = df_data.copy()print("集思录基础页信息已爬取完毕!")time.sleep(1)#等待browser.close()#关闭当前网页browser.quit()#完全退出浏览器return df_data2df_data2 = Thelogin2()

显示结果例图:

本期内容和上期内容如有侵权行为,请及时联系本人,第一时间删除各平台文章。

您的点赞分享就是我更新的动力

可转债代码交流第二期:利用Python获取集思录数据(改)相关推荐

  1. 利用 Python 获取余额宝历史收益数据

    最近想做一个关于用一些指数基金与余额宝组成的简单 风险-无风险 投资组合的实验计算,发现通达信之类的行情软件并没有提供完整的余额宝收益信息,如通达信仅有年化收益率的数据,并没有万份收益的数据.因此考虑 ...

  2. python从集思录获取最近新发可转债信息

    参考网络例子 #从集思录获取最近发行的可转债信息 # -*- coding:utf-8 -*- import json import requests import csv import re fro ...

  3. 通达信行情数据获取--python_利用 Python 获取余额宝历史收益数据

    最近想做一个关于用一些指数基金与余额宝组成的简单 风险-无风险 投资组合的实验计算,发现通达信之类的行情软件并没有提供完整的余额宝收益信息,如通达信仅有年化收益率的数据,并没有万份收益的数据.因此考虑 ...

  4. pythonqq交流群_使用 Python 获取 QQ 群投票数据

    在浏览器中直接打开会出现"载入中,请稍后..."的字眼.这是因为没有登陆,没有权限 在这里登陆自己的QQ,再访问就可以了 此时的选项是不可点击的,因为网页检测你的浏览环境不是手机界 ...

  5. python刷网易云_利用Python获取网易云音乐数据,python

    #!/usr/bin/env python # -*- coding: utf-8 -*- import json import re import urllib.request import pan ...

  6. 可转债数据一览表集思录_EXCEL一键获取可转债所有实时数据

    在本文的底部,各位读者可以获取对应的EXCEL模板. 偶尔使用集思录数据做可转债投资,但一些关键数据需要注册会员才可以使用,而且分析时经常需要导入到EXCEL中计算更多的个性指标. 因此,我用EXCE ...

  7. python自动保存ping结果_利用python获取Ping结果示例代码

    前言 本文主要跟大家分享了关于利用python获取Ping结果的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧. 示例代码: # -*- coding: utf-8 -*- i ...

  8. python过去日期_利用python获取当前日期前后N天或N月日期的方法示例

    前言 最近因为工作原因,发现一个Python的时间组件,很好用分享出来!(忘记作者名字了,在这里先感谢了),下面话不多说,来一起看看详细的介绍吧. 示例代码: # -*- coding: utf-8 ...

  9. 利用python获取自己的qq群成员信息!

    利用python获取自己的qq群成员信息! 首先说明一下需要使用的工具以及技术:python3 + selenium ,如有兴趣可以加群交流噢 selenium安装方法:pip install sel ...

最新文章

  1. BZOJ 2131 免费的馅饼(DP,二维偏序问题 / 旋转坐标轴转化问题)【BZOJ 修复工程】
  2. IDC公司:服务器类微处理器市场最新预测
  3. 使用POI读取excel文件内容
  4. oracle 自动表分析,Oracle自动分析索引,表
  5. 在 Chrome 调试 Javascript
  6. MultiByteToWideChar和WideCharToMultiByte的正确使用方法及参数详解
  7. 【分享】终端命令工具 自动生成vue组件文件以及修改router.js 1
  8. 100天python、github_GitHub - 214929177/Python-100-Days: Python - 100天从新手到大师
  9. 微信小程序 自定义picker封装成插件实现二级三级四级联动
  10. 【Hexo搭建个人博客】:yilia主题配置(二) - 背景图片
  11. IIS6 伪静态 IIS文件类型映射配置方法 【图解】
  12. dell笔记本驱动安装失败,Dell Vostro 5470 在安装读卡器驱动时失败
  13. 从0开始搭建自动化测试框架之PO分层架构
  14. 金属管材光纤激光切管机提高电瓶车制造水平
  15. HTML实现banner图切换
  16. 计算机硬盘改造u盘,iPhone扩容硬盘不要扔!变废为宝!手把手教你如何改装U盘...
  17. 可捕捉的 Microsoft Jet错误
  18. RxJava的Single、Completable以及Maybe
  19. 7-11 撸猫幸福感 (20 分)
  20. 每日分享 《一生如寄 人来人往》

热门文章

  1. linux snapshot文件夹,linux lv snapshot
  2. 不一样的Python代码写法,让你写出一手漂亮的代码
  3. mct接收_MCT与MVT编程思想
  4. 案例分享 | 方形锂电池“极柱”检测解决方案
  5. QQ表情 QQ图片 QQ图像制作方法(一)
  6. GB/T 21866抗菌涂料(漆膜)抗菌性测定法和抗菌效果
  7. PHP 在linux中 mkdir 创建文件无法赋予777权限 使用 chmod
  8. 示波器的使用及利用示波器绘制李萨如图形
  9. EUFS_SIM 仿真
  10. oracle savepoint 存在,rollback to savepoint 的问题。