晨星评级
Python爬取晨星基金评级
晨星评级介绍
晨星把每只具备3年以上业绩数据的基金归类,在同类基金中,基金按照“晨星风险调整后收益”指标(Morningstar Risk-Adjusted Return)由大到小进行排序:前10%被评为5星;接下来22.5%被评为4星;中间35%被评为3星;随后22.5%被评为2星;最后10%被评为1星。
目标网站介绍
基金评级网址:http://cn.morningstar.com/fundselect/default.aspx
指定页面的功能区比较多,本文只爬取代码、基金名称、基金分类、晨星评级(三年)、晨星评级(五年)、今年以来汇报(%)。
网站源码分析
该网站每页默认显示25行,只是会影响爬取效率,暂时不关注。
点击页码发现网址并没有发生变化,检查源码后发现每页的信息都保存在源码里面,所有信息都在两个类里面[‘gridItem’, ‘gridAlternateItem’],所以用selenium模拟翻页,然后用BeautifulSoup把目标信息爬下来即可。
安装并导入python包
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
import time
import re
import pandas as pd
import pymysql
selenium 安装比较复杂
1、pip install selenium
2、安装对应的浏览器驱动,我安装的是chromedriver.exe
3、试用打开网站
html = 'http://cn.morningstar.com/fundselect/default.aspx'
browser = webdriver.Chrome('C:/Users/user/anaconda3/driver/chromedriver.exe')
browser.get(html)
爬取信息
#定义起始页码
page_num = 1
#连接数据库
connect = pymysql.connect(host = '127.0.0.1', user = 'root', password = 'admin', db = 'stock', charset = 'utf8')
cursor = connect.cursor()
#爬取共306页
while page_num <= 306:
#列表用于存放爬取的数据
code_list = [] #基金代码
name_list = [] #基金名称
fund_cat = [] #基金分类
fund_eval_3 = [] #晨星评级(三年)
fund_eval_5 = [] #晨星评级(五年)
return_curr_y = [] #今年以来汇报(%)
#获取每页的源代码
data = browser.page_source
#如果网页没加载完成,则再等待60秒
if data == None:
time.sleep(60)
data = browser.page_source
#利用BeautifulSoup解析网页源代码
bs = BeautifulSoup(data, 'lxml')
class_list = ['gridItem', 'gridAlternateItem'] #数据在这两个类下面
#取出所有类的信息,并保存到对应的列表里
for i in range(len(class_list)):
for tr in bs.find_all('tr', {'class': class_list[i]}):
tds_text = tr.find_all('td', {'class': "msDataText"})
tds_nume = tr.find_all('td', {'class': "msDataNumeric"})
code_list.APPend(tds_text[0].find_all('a')[0].string)
name_list.append(tds_text[1].find_all('a')[0].string)
fund_cat.append(tds_text[2].string)
fund_eval_3.append(re.search('\d', tds_text[3].find_all('img')[0]['src']).group())
fund_eval_5.append(re.search('\d', tds_text[4].find_all('img')[0]['src']).group())
return_curr_y.append(tds_nume[3].string)
#插入数据到数据库
fund_df = pd.DataFrame({'fund_code': code_list, 'fund_name': name_list, 'fund_cat': fund_cat, 'fund_lvl_3':fund_eval_3, 'fund_lvl_5': fund_eval_5, 'return_y_pct': return_curr_y})
sql_insert = "insert into fund_morningstar_lvl(`fund_code`, `fund_name`, `fund_cat`, `fund_lvl_3`, `fund_lvl_5`, `return_y_pct`) values(%s, %s, %s, %s, %s, %s)"
fund_list = fund_df.values.tolist()
cursor.executemany(sql_insert, fund_list)
connect.commit()
##找到换页按钮然后点击
next_page = browser.find_element_by_link_text('>')
next_page.click()
page_num += 1
time.sleep(5)
connect.close()
爬取结果
共爬取结果7627条,拿到数据就可以去挑选自己喜欢的基金啦~
如有问题可以关注博主公众号"国韭计算器"
文章最后发布于: 2018-10-31 18:19:45
相关阅读
很多卖家都会问我这个问题:淘宝卖家怎么取消7天无理由退换货?为什么强制7天无理由?事实上,淘宝卖家在2015年时已经无法取消七天无理
爬虫入门系列(四):HTML文本解析库BeautifulSoup
本文来自微信公众号Python之禅(VTalk),作者刘志军,已获作者授权,请勿二次转载!系列文章的第3篇介绍了网络请求库神器 Requests ,请求把
导读:本文是继《从零开始做内容运营》后写的第二篇万字长文,它围绕核心用户运营话题,讲述产品获取核心用户的7个路径以及4类用户运营
前一篇文章《从金融牌照,看互联网巨头的金融布局(三方支付牌照)》介绍了三方支付牌照的重要意义和作用。互联网巨头涉足支付领域不仅
与C端产品竞品分析相比,B端产品做竞品分析有哪些注意点?与C端产品竞品分析相比,我们在做B端产品竞品分析时有数据来源有限、公开信息