前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【预备知识篇】pythonq东方财富股票数据

【预备知识篇】pythonq东方财富股票数据

作者头像
统计学家
发布2019-04-10 09:57:09
3.6K0
发布2019-04-10 09:57:09
举报

通过python爬取东方财富的股票信息。获取每只股票的:总市值 净资产 净利润 市盈率 市净率 毛利率 净利率 ROE

东方财富网址:http://quote.eastmoney.com/stocklist.html

先爬取股票汇总页面。

在进入每只股票的详情页,爬取每只股票的具体信息。

需要安装BeautifulSoup包、requests包、lxml包

代码语言:javascript
复制
#coding=utf-8
import requests,re,json,time,os
import heapq

from bs4 import BeautifulSoup

class GPINFO(object):
    """docstring for GPINFO"""
    def __init__(self):
        self.Url = 'http://quote.eastmoney.com/stocklist.html'
        self.BaseData = []
        self.Date = time.strftime('%Y%m%d')
        self.Record = 'basedata'+self.Date
        if os.path.exists(self.Record):
            print ('record exist...')
            self.BaseData = self.get_base_data_from_record()
        else:
            print ('fuck-get data again...')
            self.get_data()

    #将数据写入到记录文件
    def write_record(self,text):
        with open(self.Record,'ab') as f:
            f.write((text+'\n').encode('utf-8'))

    #从记录文件从读取数据
    def get_base_data_from_record(self):
        ll = []
        with open(self.Record,'rb') as f:
            json_l = f.readlines()
            for j in json_l:
                ll.append(json.loads(j.decode('utf-8')))
        return ll

    #爬虫获取数据
    def get_data(self):
        #请求数据
        orihtml = requests.get(self.Url).content
        #创建 beautifulsoup 对象
        soup = BeautifulSoup(orihtml,'lxml')
        #采集每一个股票的信息
        count = 0
        for a in soup.find('div',class_='quotebody').find_all('a',{'target':'_blank'}):
            record_d = {}
            #代号
            num = a.get_text().split('(')[1].strip(')')  #获取股票代号
            if not (num.startswith('00') or num.startswith('60')):continue #只需要6*/0*    只要以00或60开头的股票代号
            record_d['num']=num
            #名称
            name = a.get_text().split('(')[0]  #获取股票名称
            record_d['name']=name
            #详情页
            detail_url = a['href']
            record_d['detail_url']=detail_url

            cwzburl = detail_url
            #发送请求
            try:
                cwzbhtml = requests.get(cwzburl,timeout=30).content  #爬取股票详情页
            except Exception as e:
                print ('perhaps timeout:',e)
                continue
            #创建soup对象
            cwzbsoup = BeautifulSoup(cwzbhtml,'lxml')

            #财务指标列表 [浦发银行,总市值    净资产    净利润    市盈率    市净率    毛利率    净利率    ROE] roe:净资产收益率
            try:
                cwzb_list = cwzbsoup.find('div',class_='cwzb').tbody.tr.get_text().split()  #获取class为cwzb的div下第一个tbody下第一个tr获取内部文本,并使用空格分割
            except Exception as e:
                print ('error:',e)
                continue
            #去除退市股票
            if '-' not in cwzb_list:
                record_d['data']=cwzb_list   #将数据加入到字典中
                self.BaseData.append(record_d)  #将字典加入到总数据总
                self.write_record(json.dumps(record_d))  #将字典类型转化为字符串,写入文本
                count=count+1
                print (len(self.BaseData))

def main():
    test = GPINFO()
    result = test.BaseData
    #[浦发银行,总市值    净资产    净利润    市盈率    市净率    毛利率    净利率    ROE] roe:净资产收益率]
    top_10 = heapq.nlargest(10,result,key=lambda r:float(r['data'][7].strip('%')))   #获取前10名利率最高者的数据
    for item in top_10:
        for key in item['data']:
            print(key),
        print('\n')
#打印字符串时,使用print str.encode('utf8');
#打印中文列表时,使用循环 for key in list:print key
#打印中文字典时,可以使用循环,也可以使用json:
#  import json
# print json.dumps(dict, encoding='UTF-8', ensure_ascii=False)


if __name__ == '__main__':
    main()

作者博客:https://blog.csdn.net/luanpeng825485697/article/details/78425612

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档