Python 爬取上证所有股票代码,输出CSV

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)

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值