专栏首页机器学习与统计学【预备知识篇】pythonq东方财富股票数据

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

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

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

先爬取股票汇总页面。

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

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

#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

本文分享自微信公众号 - 机器学习与统计学(tjxj666),作者:栾鹏

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用Python让你的命令行像坤坤一样会打篮球

    承接上文,作为一个经常逛b站的肥宅,近期b站上除了流行"品如”素材的视频,更多的莫过于蔡xx打球视频的了,有模仿的,有对比的,有手绘的,更过分的是竟然有人在命令...

    统计学家
  • 100天搞定机器学习|Day16 通过内核技巧实现SVM

    再简单回顾一下svm算法的思路,详细推导请看前情回顾相关内容,或在文末下载之前推荐的《理解SVM 的三层境界》PDF版。

    统计学家
  • 《Python基础教程》 读书笔记 第九章 魔法方法、属性和迭代器 (上)

    在Python中创建一个构造方法很容易。只要把init方法的名字从简单的init修改为魔法版本__init__即可:

    统计学家
  • Python数据库操作之pymysql模块和sqlalchemy模块

    参考博客https://www.cnblogs.com/aylin/p/5770888.html

    林清猫耳
  • 浅谈django 模型类使用save()方法的好处与注意事项

    在django 的模型类里,如果有些字段的值是需要动态生成的,那么就在模型类里同样添加上对应的字段,并写上对应的方法,

    砸漏
  • 目标跟踪与定位——状态与定位

    卡尔曼滤波器可以结合不准确的传感器测量和稍微不准确的运动预测,以获得比仅来自传感器读数或仅有关运动的任何更好估计位置。

    小飞侠xp
  • python实现从ftp服务器下载文件

    代码之余,将代码过程重要的一些代码段备份一下,如下的代码内容是关于Python从ftp服务器下载文件的的代码,希望能对小伙伴有用途。

    砸漏
  • python爬虫学习,爬取豆瓣各分类书单

    初学python会比较困难,但是只要坚定自己的信念,不轻易认输,敢于面对,成功迟早会笑脸相迎。

    python学习教程
  • Python基础(下)

    定义了函数后,相当于有了一个具有某功能的代码块,想要调用函数,通过函数名()即可。详细示例如下:

    py3study
  • unittst与webdriver的关系(二)

    在初始python单元测试框架unittest与webdriver的关系(一)中,介绍了unittest与自动化的结合,下面介绍测试套件TestSu...

    无涯WuYa

扫码关注云+社区

领取腾讯云代金券