最近再看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