Python 爬取上证所有股票代码,输出CSV
import requests
import json
import csv
#创建csv并写入数据函数,qh_path 路径&文件名,qh_header 字段名,qh_data写入的数据列表 阙辉
def qh_creat_csv(qh_path,qh_data,qh_header):
with open(file=qh_path,mode='w',newline='',encoding='gbk') as file:
qh_csv_file = csv.writer(file)
qh_csv_file.writerow(qh_header)
qh_csv_file.writerows(qh_data)
class QH_ShangZheng_Spider(object):
def __init__(self, qh_headers = { 'Referer' : 'http://www.sse.com.cn/assortment/stock/list/share/',
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safar',
'X-Request-Type' : '',
'Connection': 'close',
'X-Requested-With' : ''},
qh_url="""http://query.sse.com.cn/security/stock/getStockListData2.do""",
qh_params= { 'jsonCallBack' : '',
'isPagination' : 'true',
'stockCode' : '',
'csrcCode' : '',
'areaName' : '',
'stockType': '1',
'pageHelp.cacheSize': '1',
'pageHelp.beginPage': '1',
'pageHelp.pageSize': '20000',
'pageHelp.pageNo': '1',
'pageHelp.endPage': '11',
'_': '1620315069812',},
qh_CanShu="1", #1,2,3,4,5 默认是1 A股
qh_filed_name=['LISTING_BOARD',
'COMPANY_ABBR',
'END_SHARE_CODE',
'NUM',
'END_SHARE_MAIN_DEPART',
'END_SHARE_VICE_DEPART',
'CHANGE_DATE',
'SECURITY_ABBR_B',
'SECURITY_ABBR_A',
'SECURITY_CODE_A',
'ENGLISH_ABBR',
'SECURITY_CODE_B',
'COMPANY_CODE',
'QIANYI_DATE',
'LISTING_DATE',]):
"""
初始化基本参数
"""
self.qh_headers = qh_headers
self.qh_url = qh_url
self.qh_CanShu = qh_CanShu
qh_params["stockType"] = self.qh_CanShu
self.qh_params = qh_params
self.qh_filed_name = qh_filed_name
def QH_XiuGai_CanShu(self, qh_headers={'Referer': 'http://www.sse.com.cn/assortment/stock/list/share/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safar',
'X-Request-Type': '',
'Connection': 'close',
'X-Requested-With': ''},
qh_url="""http://query.sse.com.cn/security/stock/getStockListData2.do""",
qh_params={'jsonCallBack': '',
'isPagination': 'true',
'stockCode': '',
'csrcCode': '',
'areaName': '',
'stockType': '1',
'pageHelp.cacheSize': '1',
'pageHelp.beginPage': '1',
'pageHelp.pageSize': '20000',
'pageHelp.pageNo': '1',
'pageHelp.endPage': '11',
'_': '1620315069812', },
qh_CanShu="1", # 1,2,3,4,5 默认是1 A股
qh_filed_name=['LISTING_BOARD',
'COMPANY_ABBR',
'END_SHARE_CODE',
'NUM',
'END_SHARE_MAIN_DEPART',
'END_SHARE_VICE_DEPART',
'CHANGE_DATE',
'SECURITY_ABBR_B',
'SECURITY_ABBR_A',
'SECURITY_CODE_A',
'ENGLISH_ABBR',
'SECURITY_CODE_B',
'COMPANY_CODE',
'QIANYI_DATE',
'LISTING_DATE', ]):
"""
修改参数方法
"""
self.qh_headers = qh_headers
self.qh_url = qh_url
self.qh_CanShu = qh_CanShu
qh_params["stockType"] = self.qh_CanShu
self.qh_params = qh_params
self.qh_filed_name = qh_filed_name
def QH_Rquests_Get(self,qh_url, qh_headers, qh_params):
qh_p = requests.get(qh_url, headers=qh_headers, params=qh_params)
print(qh_p.url)
return qh_p.text.encode('utf8', 'ignore')
def QH_Chu_Shi_Data(self,qh_data):
"""
初始化数据 作者:阙辉
:param qh_data: 传入需要初始化数据
:return:
"""
qh_data = qh_data
qh_requs = json.loads(qh_data)
qh_requs = qh_requs["result"]
return qh_requs
def QH_Shang_Zheng_JieXi(self,qh_data,qh_filed_name):
"""
解析数据方法 作者:阙辉
:param qh_data: 传入需要解析的数据
:param qh_filed_name: 传入需要解析的字段
:return:
"""
qh_data_list = qh_data
qh_filed_name = qh_filed_name
QH_JieGuo_List = []
for qh_row in qh_data_list:
QH_JieGuo_row_List = []
for qh_row_r in qh_filed_name:
QH_JieGuo_row_List.append(qh_row[qh_row_r])
QH_JieGuo_List.append(QH_JieGuo_row_List)
return QH_JieGuo_List
def QH_ShangZheng_Main(self):
qh_url = self.qh_url
qh_headers = self.qh_headers
qh_params = self.qh_params
qh_filed_name = self.qh_filed_name
qh_requs = self.QH_Rquests_Get(qh_url,qh_headers,qh_params)
qh_requs = self.QH_Chu_Shi_Data(qh_requs)
qh_requs = self.QH_Shang_Zheng_JieXi(qh_requs,qh_filed_name)
return qh_requs
AA = QH_ShangZheng_Spider()
qh_l = [1,2,3,4,5]
QH_JieGuo_List = []
for qh_i in qh_l:
QH_JieGuo_List_01 = []
AA.QH_XiuGai_CanShu(qh_CanShu=str(qh_i))
QH_JieGuo_List_01 = AA.QH_ShangZheng_Main()
print(QH_JieGuo_List_01)
QH_JieGuo_List = QH_JieGuo_List + QH_JieGuo_List_01
print(QH_JieGuo_List)
print(len(QH_JieGuo_List))
#输出股票代码
qh_creat_csv("上交所股票代码.csv",QH_JieGuo_List,AA.qh_filed_name)