2020-09-20 Python3爬虫获取个人基金的排名信息,写入到excel表中方便挑选基金

本文介绍了一个用于批量抓取并整理基金四分位排名的Python程序。该程序能够从天天基金网自动获取指定基金列表的四分位排名信息,并将其存储到Excel表格中,便于投资者进行对比分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 昨天在看基金相关的视频,老师讲挑选基金的技巧时,举例通过天天基金网站搜索基金代码,然后通过阶段涨幅模块的四分位排名来检验基金的好坏程度,http://fund.eastmoney.com/580003.html?spm=search。
因为本人买了各种基金多达20多种,想着这样一个一个找有点发怵,就正好赶上周六周天,在家没啥事就写了个程序遍历基金输出四分位排名到excel里,方便统一查看比较。
以后想着也可以加入各个参数,分别比较基金的好坏。
以下代码有些重复,有时间会继续优化成函数形式。

主要分两个部分,一个是读取时间范围,写入到excel的标题,一个是循环读取各个基金对应的四分位,写入excel的各个列

# coding=utf-8
import requests
from bs4 import BeautifulSoup
import re
import xlwt
import xlrd
from xlutils.copy import copy
fund_codes=["161024","161725",'002697','006408','005919','003397','004812','001704','006751',"32002",'004190','001268','001632',"519674",'004347','001618',"320007",'007301','001938','006682',"260108","166002"]
row=0

# 一、取时间范围字段,作为表格的标题
#1、获取网页内容
base_url = 'http://fund.eastmoney.com/161024.html?spm=search'
response = requests.get(url=base_url)
response.encoding = response.apparent_encoding
soup = BeautifulSoup(response.text, 'lxml').decode('utf-8')  # 网页返回的内容
#2、根据正则表达式找出想要的字段,并格式化为列表形式
pattern2 = re.compile(
    '<div.*?fund_item IncreaseAmount popTab.*?IncreaseAmount">.*?<div.*?bd">.*?<li.*?increaseAmount_stage">.*?<div>(.*?)</div>.*?<div>(.*?)</div>.*?<div>(.*?)</div>.*?<div>(.*?)</div>.*?<div>(.*?)</div>.*?<div>(.*?)</div>.*?<div>(.*?)</div>.*?<div>(.*?)</div>',
    re.S)
times = re.findall(pattern2, soup)
print(times)
#将数组中的空格和换行符去掉:strip()
for time in times:
    times2=time[0].strip(),time[1].strip(),time[2].strip(),time[3].strip(),time[4].strip(),time[5].strip(),time[6].strip(),time[7].strip()
print(times2)
# 元组转换成列表:list()
times=list(times2)
print(times)
#3、打开表格,写入标题
path = "D:\python\\fund_基金\\text4.xls"
workbook = xlrd.open_workbook(path)  #打开工作簿
sheets = workbook.sheet_names()  #获取工作簿中的所有表格
worksheet = workbook.sheet_by_name(sheets[0])  #获取工作簿中的第一个表格
rows_old = worksheet.nrows  #获取表格中已存在的数据的行数
new_workbook = copy(workbook)  #将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0)  #获取转化后工作簿中的第一个表格
for j in range(len(times)):   #循环读取列表,将列表数据写入row行,j列
    new_worksheet.write(row,j+1,times[j])
row+=1
new_workbook.save(path)  #保存工作簿
print("标题写入成功")

#二、循环读取各个基金的四分位排名
for code in fund_codes:
    #1、获取网页返回内容
    base_url='http://fund.eastmoney.com/%s.html?spm=search'%code
    response=requests.get(url=base_url)
    response.encoding = response.apparent_encoding
    soup = BeautifulSoup(response.text,'lxml').decode('utf-8')  #网页返回的内容

    #2、正则表达式解析出排名高低,并格式化为列表格式
    pattern = re.compile('<div.*?fund_item IncreaseAmount popTab.*?IncreaseAmount">.*?<div.*?bd">.*?<li.*?increaseAmount_stage">.*?<div.*?typeName.*?position:relative;">.*?<div.*?infoTips">.*?</td>.*?<h3>(.*?)</h3>.*?<h3>(.*?)</h3>.*?<h3>(.*?)</h3>.*?<h3>(.*?)</h3>.*?<h3>(.*?)</h3>.*?<h3>(.*?)</h3>.*?<h3>(.*?)</h3>.*?<h3>(.*?)</h3>',re.S)
    items=re.findall(pattern,soup)
    print(items)
    # 将数组中的空格和换行符去掉:strip()
    for item in items:
        items2=item[0].strip(),item[1].strip(),item[2].strip(),item[3].strip(),item[4].strip(),item[5].strip(),item[6].strip(),item[7].strip()
    print(items2)
    # 元组转换成列表:list()
    lists=list(items2)
    print(lists)
    #3、将数据写入到文件中
    #1)写入txt文件
    # file=open("fund.txt","w+")
    # for i in lists:
    # 	file.writelines(i)

    # 2)首次写入excel文件,只能写入一行, 无法追加多行
    # f=xlwt.Workbook()
    # sheet1=f.add_sheet(u'sheet1',cell_overwrite_ok=True)
    # for j in range(len(lists)):
    #     sheet1.write(row,j,lists[j])
    # row = row + 1
    # f.save('text4.xls')

    #3)打开表格,追加形式写入新数据
    path = "D:\python\\fund_基金\\text4.xls"
    workbook = xlrd.open_workbook(path)  #打开工作簿
    sheets = workbook.sheet_names()  #获取工作簿中的所有表格
    worksheet = workbook.sheet_by_name(sheets[0])  #获取工作簿中的第一个表格
    rows_old = worksheet.nrows  #获取表格中已存在的数据的行数
    new_workbook = copy(workbook)  #将xlrd对象拷贝转化为xlwt对象
    new_worksheet = new_workbook.get_sheet(0)  #获取转化后工作簿中的第一个表格
    for j in range(len(lists)):   #循环读取列表,将列表数据写入row行,j列
        new_worksheet.write(row,0,code)
        new_worksheet.write(row,j+1,lists[j])
    row=row+1
    new_workbook.save(path)  #保存工作簿
    print("%s行追加写入成功!"%(row-1))

最终执行结果:test4.xls

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值