最近再看python的爬虫, 刚好有人问到能不能把所有的股票数据爬下来. 看一些其他人的实现方式,可能一些网站进行了优化,竟然没有找到能完全直接用的, 但得到了很好的思路. 简单记录一下,方便以后自己使用.
准备工作.
安装anaconda. 使用jupyter.
安装BeautifulSoup, requests 包
实现步骤:
1. 得到股票列表
def is_stock(href_para):
if href_para is not None:
href_list = href_para.split('/')
last = href_list[-1]
# print(last)
#判断是上海或者深圳的股票,因为里面还有一些其它,比如基金.
ret= re.match("^[s][hz][0,3,6]\d{5}\.html$", last)
# print(ret)
return ret
f =open('stock.csv','w+',encoding='utf-8',newline="")
writer = csv.writer(f)
# writer.writerow(('代码', '名称', '链接'))
stock_data = soup.find_all("a", href=is_stock)
# print(stock_data)
#储存到一个list,当然也把它存储到一个文件,方便以后使用
stock_list = []
for stock_it in stock_data:
print(stock_it)
num = re.findall("\d{6}",stock_it.contents[0])
if num is not None and len(num)>0 :
print(num)
stock_list.append(num[0])
# writer.writerow((num[0], stock_it.contents[0],stock_it['href']))
writer.writerow((num[0]))
f.close()
print("finished")
2.下载历史数据
import urllib.request
for code in stock_list:
#判断是上海还是深圳,这里code是7位. sh 0 + code sz 1+code
if code[0] == '6':
url = 'http://quotes.money.163.com/service/chddata.html?code=0' + code + \
'&end=20191004&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
else:
url = 'http://quotes.money.163.com/service/chddata.html?code=1' + code + \
'&end=20191004&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
urllib.request.urlretrieve(url, 'D:\\doc\\stock_data\\' + code + '.csv')
出来的效果, 每个股票是一个文件,打开是这样的
完整代码:
https://download.csdn.net/download/nujiah001/11833241