分享

【爬虫案例】采集基金排行数据

 老马的程序人生 2022-12-30 发布于湖南

爬取网站:http://fund.eastmoney.com/data/fundranking.html

爬取目标:采集近1年全部开放基金的排行数据。包括“基金代码”,“基金简称”,“日期”,“单位净值”,“累计净值”,“日增长率”,“近1周”,“近1月”,“近3月”,“近6月”,“近1年”,“近2年”,“近3年”,“今年来”,“成立来”,“手续费”,并存储在CSV文件中。

目标地址:

  • pi -- 当前是第i页
  • pn -- 每页显示pn条数据

反爬策略:防盗链

爬取代码:

import requests
import csv
import time

url = 'http://fund.eastmoney.com/data/rankhandler.aspx'
para = {
    'op''ph',
    'dt''kf',
    'ft''all',
    'rs''',
    'gs'0,
    'sc''1nzf',
    'st''desc',
    'sd''2021-12-29',
    'ed''2022-12-29',
    'qdii''',
    'tabSubtype'',,,,,',
    'pi'1,
    'pn'1000,
    'dx'1,
    'v'0.39490818136479855
}
head = {
    'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
    'Referer''http://fund.eastmoney.com/data/fundranking.html'
}

with open(r'.\开放基金排行数据.csv', mode='w+', newline='', encoding='utf-8'as f:
    csv_writer = csv.writer(f)
    csv_writer.writerow(["基金代码""基金简称""日期""单位净值""累计净值""日增长率",
                         "近1周""近1月""近3月""近6月""近1年""近2年""近3年",
                         "今年来""成立来""手续费"])

    for i in range(114):
        para['pi'] = i
        time.sleep(1)
        response = requests.get(url=url, params=para, headers=head)
        j = response.text.index('[')
        k = response.text.index("]")
        s = eval(response.text[j:k + 1])
        for r in s:
            lst = r.split(',')
            e0 = lst[0].rjust(6'0') + '\t'  # 基金代码
            e1 = lst[1]  # 基金简称
            e2 = lst[3]  # 日期
            e3 = lst[4]  # 单位净值
            e4 = lst[5]  # 累计净值
            e5 = lst[6] + "%" if lst[6] != '' else "---"  # 日增长率
            e6 = lst[7] + "%" if lst[7] != '' else "---"  # 近1周
            e7 = lst[8] + "%" if lst[8] != '' else "---"  # 近1月
            e8 = lst[9] + "%" if lst[9] != '' else "---"  # 近3月
            e9 = lst[10] + "%" if lst[10] != '' else "---"  # 近6月
            e10 = lst[11] + "%" if lst[11] != '' else "---"  # 近1年
            e11 = lst[12] + "%" if lst[12] != '' else "---"  # 近2年
            e12 = lst[13] + "%" if lst[13] != '' else "---"  # 近3年
            e13 = lst[14] + "%" if lst[14] != '' else "---"  # 今年来
            e14 = lst[15] + "%" if lst[15] != '' else "---"  # 成立来
            e15 = lst[19]  # 手续费
            t = [e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15]
            print(t)
            csv_writer.writerow(t)

注意:加'\t'是为了解决往.csv文件中保存以0开头的数字字符串问题。

e0 = lst[0].rjust(6'0') + '\t'  # 基金代码

最后结果:


一键三连,一起学习⬇️

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多