全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 经管百科 爱问频道
21028 7
2015-09-20
python-大批量自动采集获取网易财经所有A股上市公司股票数据查询并导出excel表格中

之前捣鼓过python获取股票002023海特高新2013年年度报告中的所需部分,但是写出来后发现其实用得很少,还不如直接看年报。
几个月前读过雪球@小小辛巴的《重剑无锋》,这两天莫名地想起@小小辛巴看公司时有个指标几乎都会提及,那就是资产负债率,而自己之前并不太重视这个指标,于是乎就萌生了一个网易财经上用python获取所有A股上市公司股票的资产负债率,并把股票数据导出excel表格的想法,以供股票数据查询
用了大概两个2小时写了以下代码。90%都是之前写过的,时间主要浪费在BeautifulSoup那一段的中文识别上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# -*- coding: utf-8-*-
# @Date    : 2014-05-20
# @Author  : Lifemaxer
# @Website : http://lifemaxer.com
# @Description1:  python-大批量自动采集获取网易财经所有A股上市公司股票资产负债率
# @Description2:  并导入excel表格中
# @Description3:  替换下方中文可修改成获取任意财务数据
# @Tools-Required: BeautifulSoup, xlwt
import re,urllib2
import xlwt
from bs4 import BeautifulSoup
count = 1
class getstock:
    def __init__(self):
        pass

    def go(self):
        #定义网址,获取上交所创业板只需对应修改stock_num为6开头或3开头即可
        stock_num = str(count).zfill(6)
        url = 'http://quotes.money.163.com/f10/zycwzb_'+stock_num+',year.html'
        print(u"股票代码:" + stock_num)
        headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6"}
        req = urllib2.Request( url, headers = headers)
        try:
            content = urllib2.urlopen(req).read()
        except:
            return
        soup = BeautifulSoup(content)
        #获取名称
        name = soup.find('h1',class_='name').contents[1].contents[0].encode('gb18030').decode('gb18030')
        print name
        ws.write(count, 0, stock_num)
        ws.write(count, 1, name)
        #获取负债率
        a = soup.find_all(class_='table_bg001 border_box fund_analys')
        for i in a:
            #此处替换中文可修改成获取任意财务数据
            if i.find('td',text=re.compile(u'资产负债率')):
               b = i.find('td',text=re.compile(u'资产负债率')).parent.contents
               #网易财经默认一页最多显示2008-2013年年报共6年
               number = [3,4,5,6,7,8]
               for num in number:
                   if num < len(b):
                         data = b[num].contents[0].decode('unicode_escape')
                         ws.write(count, num-1, data)

if __name__ == '__main__':
    #定义excel表格内容
    wb = xlwt.Workbook()
    ws = wb.add_sheet(u'资产负债表')
    ws.write(0, 0, u'股票代码')
    ws.write(0, 1, u'股票名称')
    ws.write(0, 2, u'2013-12-31')
    ws.write(0, 3, u'2012-12-31')
    ws.write(0, 4, u'2011-12-31')
    ws.write(0, 5, u'2010-12-31')
    ws.write(0, 6, u'2009-12-31')
    ws.write(0, 7, u'2008-12-31')
    gs = getstock()
    #目前深证最大号为002725,获取上交所创业板请修改相应最大号码
    while count <=2725:
        gs.go()
        wb.save('stockdebt.xls')
        count += 1

1、 以下替换“资产负债率”可修改成获取股票任意财务数据,如基本每股收益(元)、主营业务收入增长率等。

1
2
if i.find('td',text=re.compile(u'资产负债率')):
b = i.find('td',text=re.compile(u'资产负债率')).parent.contents

2、此篇代码获取的是所有深交所上市公司的资产负债率,不含创业板。
需获取创业板、上交所股票资产负债率也很简单,只需修改代码里注释的两个地方即可。

3、采集完后会发现表格里有些行是空白的,原因是有些股票代码没有对应的股票。
这个我也是抓取之后才发现。更甚者,有几百个连号都是没有对应股票的。

excel怎么删除空白行?

参考这篇excel教程,完美解决:Excel批量自动删除空白行超简单方法

所有股票资产负债率数据打包下载:

数据压缩包附件
解压密码: lifemaxer.com

简单整理后的效果图:




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-9-23 19:08:01
貌似不行啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-20 10:38:41
您好楼主,您的链接失效了,可否给我发一份呀,万分感谢! 358554731@qq.com
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-12-27 11:01:51
厉害了,学习学习
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-9-12 21:10:23
urllib2的库已经停用了吗?我下载不了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-10-14 15:25:21
为什么不去证监会指定的报表披露网站抓取呢。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群