You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import urllib
import json
import csv
from tqdm import tqdm
# 下载器
class Downloader(object):
def __init__(self, url):
self.url = url
def download(self):
html_content = urllib.request.urlopen(self.url).read()
html_content = html_content.decode("utf-8")
return html_content
# 调度器
class Controller(object):
def __init__(self):
self.downloader = None
self.parser = None
self.saver = None
def get_data(self):
url = "http://quotes.money.163.com/hs/service/diyrank.php?host=http%3A%2F%2Fquotes.money.163.com%2Fhs%2Fservice%2Fdiyrank.php&page=0&query=STYPE%3AEQA&fields=NO%2CSYMBOL%2CNAME%2CPRICE%2CPERCENT%2CUPDOWN%2CFIVE_MINUTE%2COPEN%2CYESTCLOSE%2CHIGH%2CLOW%2CVOLUME%2CTURNOVER%2CHS%2CLB%2CWB%2CZF%2CPE%2CMCAP%2CTCAP%2CMFSUM%2CMFRATIO.MFRATIO2%2CMFRATIO.MFRATIO10%2CSNAME%2CCODE%2CANNOUNMT%2CUVSNEWS&sort=PERCENT&order=desc&count=3607&type=query"
html_content = urllib.request.urlopen(url).read()
# 这时候解码可能导致json解析错误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# html_content = html_content.decode("unicode_escape")
# 当数量大于2995会报错 json解析失败 原因是编号为2996的股票 在公告中嵌套了引号导致json解析失败
data = json.loads(html_content)
self.saver = Saver(data=data)
self.saver.save()
class Saver(object):
def __init__(self, data):
self.data = data
const_path = sys.path[0].replace("\\craw_data\\stock_list", "")
f = open(const_path + '\\const.json', 'r', encoding='utf8')
self.consts = json.loads(f.read())
self.file_path = self.consts['path']['stock_list']['netease'] + "\\stock_list.json" # 存放目录
def save(self):
# 新建文件, 写入文件头
file_header = ["代码", "名称", '流通市值', '每股收益', '总市值']
csv_file = open(self.file_path, 'w', newline='')
writer = csv.writer(csv_file)
writer.writerow(file_header)
list = self.data['list']
sum = len(list)
for i in tqdm(range(0, sum)):
item = list[i]
# 处理股票代码, 去掉网易财经的0/1前缀 并使其在Excel中显示正常加`
code = str(item['CODE'])
code = code[1:7] if len(code) == 7 else code[:]
code = "`" + code
row = [code, item['NAME'], item['MCAP'], item['MFSUM'], item['TCAP']]
csv_file = open(self.file_path, 'a', newline='') # 追加
writer = csv.writer(csv_file)
writer.writerow(row)
if __name__ == '__main__':
controller = Controller()
controller.get_data()