集思录可转债爬取

本代码是爬取集思录可转债信息,(除去了发布赎回的,根据安道全老师的三条安全线投资法添加了建仓线、加仓线、重仓线),价格达到三条线的,给与操作提示。

# V交流:by15188607997
# -*- coding:utf-8 -*-
import json
import requests
import csv
import re
from lxml import etree

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"]
        # 是否赎回
        is_shui = dat_cell['force_redeem']
        if is_shui == None:
            # 转债名称
            name = dat_cell['bond_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']

            # 获取赎回价
            xiangqing_url = 'https://www.jisilu.cn/data/convert_bond_detail/' + id
            xiangqing_response = requests.get(xiangqing_url)
            html = xiangqing_response.content.decode("utf-8")
            html = etree.HTML(html)
            lixi = html.xpath('.//td[@id="cpn_desc"]/text()')
            pattern = re.compile(r'\d+\.\d+?')  # 查找数字
            lixi = pattern.findall(lixi[0])
            shuhuijia = html.xpath('.//td[@id="redeem_price"]/text()')
            li_price = 0
            for li in lixi:
                li_price = li_price + float(li)
            try:
                jiancang = float(shuhuijia[0]) + (li_price - float(lixi[-1])) * 0.8
            except:
                jiancang = 0

            # 是否可操作
            if jiancang != 0 and float(price) - jiancang < 3:
                is_oper = '建仓'
                if jiancang != 0 and float(price) - float(shuhuijia[0]) < 3:
                    is_oper = '加仓'
            else:
                is_oper = ''
            lst_dat.append(id)
            lst_dat.append(name)
            lst_dat.append(price)
            lst_dat.append(jiancang)
            lst_dat.append(shuhuijia[0])
            lst_dat.append('')
            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(is_oper)
            lst_data.append(lst_dat)
        else:
            continue
    return lst_data

def wirte_csv(data):
    # 1. 创建文件对象
    f = open('可转债.csv', 'w', encoding='utf-8', 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)

结果:

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页