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
简单整理后的效果图: