Advertisement

抓取东方财富网股票信息

阅读量:
复制代码
    举例
    目标网站 : 东方财富网 (排行)  沪深A股
    网站是使用Ajax异步加载 
    url: http://quote.eastmoney.com/center/gridlist.html#hs_a_board
    
    
      
      
      
      
    

在这里插入图片描述
因为是Ajax异步加载 所以要找到包含数据的json接口

复制代码
    包含数据json   url : http://33.push2.eastmoney.com/api/qt/clist/get
    
    params = {
    'cb': 'jQuery1124011214511892561374_1575904469870',
    'pn': 1,
    'pz': '20',
    'po': '1',
    'np': '1',
    'ut': 'bd1d9ddb04089700cf9c27f6f7426281',
    'fltt': '2',
    'invt': '2',
    'fid': 'f3',
    'fs': 'm:0 t:6,m:0 t:13,m:0 t:80,m:1 t:2,m:1 t:23',
    'fields': 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152',
    '_': '1575904469955'
    }
    	
    	参数规律  pn值 +1 
    	得到数据json而且掌握网页规律后,使用循环就可以得到所有数据的json,然后进行清洗,就变成我们想要的数据了  
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

具体的代码如下 (包括数据清洗,和存储mysql数据库)

复制代码
    # _*_ coding: utf-8 _*_
    # Date: 2019/12/10 0010 12:51
    # Author: Mijiu
    # Version: 1.0
    import json
    import time
    import pymysql
    import requests
    
    
    # 东方财富网
    def getPage( number):
    '''
    对目标网站进行数据采集
    :param number: 采集多少页
    :return: 采集到的数据
    '''
    strUrl = 'http://33.push2.eastmoney.com/api/qt/clist/get'
    params = {
        'cb': 'jQuery1124011214511892561374_1575904469870',
        'pn': str(number),
        'pz': '20',
        'po': '1',
        'np': '1',
        'ut': 'bd1d9ddb04089700cf9c27f6f7426281',
        'fltt': '2',
        'invt': '2',
        'fid': 'f3',
        'fs': 'm:0 t:6,m:0 t:13,m:0 t:80,m:1 t:2,m:1 t:23',
        'fields': 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152',
        '_': '1575904469955'
    }
    response = requests.get(strUrl, params=params)
    
    # 处理多余数据方便转换为字典
    data = response.text.replace("jQuery1124011214511892561374_1575904469870",'').replace('(',"").replace(')','').replace(';','')
    
    return json.loads(data)
    
    num_a = 0
    
    def Get_Data(num):
    '''
    对东方财富网抓抓取的数据进行处理
    :return:
    '''
    global num_a
    for i in range(1, num):
        time.sleep(0.2)
        data = getPage(i)
        for t1 in data.get('data').get('diff'):
            num_a+=1
            sql = 'insert into STOCK values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
            list1 = [str(num_a),t1.get('f12'),t1.get('f14'),t1.get('f2'),t1.get('f4'),t1.get('f5'),t1.get('f6'),t1.get('f7'),t1.get('f8'),t1.get('f15'),t1.get('f16'),t1.get('f17'),t1.get('f18'),t1.get('f23')]
            Get_mysql(sql_ = sql,data = list1)
    # f2最新价 f3涨跌幅 f4涨跌额 f5成交量 f6成交额 f7振幅  f8换手率 f12 代码  f14 名称  f15最高价  f16最低  f17今开 f18昨收  f23 市净率
    
    
    def Get_mysql(sql_,data):
    conn = pymysql.connect(
        host="127.0.0.1",
        user="root",
        port=3306,
        passwd="mysql123",
        db="stock",
        charset="utf8"
    )
    cursor = conn.cursor()
       
    cursor.execute(sql_,data)
    conn.commit()
    cursor.close()
    conn.close()
    print("数据存储成功!")
    
    
    if __name__ == '__main__':
    Get_Data(100)   # 传入100代表采集100页数据
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

数据如下
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~