头发 发表于 2021-1-18 13:37:36

求大佬看看如何存储爬取到的json数组方便?

[
        {
                "a" : "aa" ,
                "b" : "bb" ,
        },
        {
                "a" : "cc",
                "b" : "dd",
        }
]
[
        {
                "a" : "11" ,
                "b" : "22" ,
        },
        {
                "a" : "33",
                "b" : "44",
        },
        {       
                "a" : "55",
                "b" : "66"
        }
]

爬取到的格式如上(a和b不变,只有后边跟的数据变),实际远远比上边的数组多。
如何在pycharm中改格式才能方便把json数组里的数据存入到mysql中?
求有经验的大佬们指点指点{:5_92:}

suchocolate 发表于 2021-1-18 13:37:37


import requests
import pymysql


def main():
    # 准备数据库连接,假如已有数据库test,其中已有stock这个表
    db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='test')
    cursor = db.cursor()
    sql = 'INSERT INTO stock(id, name, symbol) values(%s, %s, %s)'
    # 获取数据
    url = 'http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQFuturesData?page=1&num=5&sort=position&asc=0&node=dlm_qh&base=futures'
    headers = {'user-agent': 'firefox'}
    r = requests.get(url, headers=headers)
    j_data = r.json()
    # 处理数据,拿name和symbol这2个值做例子
    for n, i in enumerate(j_data):
      nm = i['name']
      sy = i['symbol']
      print(nm)
      print(sy)
      # 写数据库
      try:
            cursor.execute(sql, (n, nm, sy))
            db.commit()
      except:
            db.rollback()
    db.close()


if __name__ == '__main__':
    main()

suchocolate 发表于 2021-1-18 13:43:01

数据格式不太对,你是如何获得这个数据的,我需要看下原始数据。

头发 发表于 2021-1-18 17:16:51

本帖最后由 头发 于 2021-1-18 17:18 编辑

suchocolate 发表于 2021-1-18 13:43
数据格式不太对,你是如何获得这个数据的,我需要看下原始数据。

http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQFuturesData?page=1&num=5&sort=position&asc=0&node=dlm_qh&base=futures

原始的就是上边网址里的数据{:10_297:} 爬了很多个这种网址的,以json格式保存了

头发 发表于 2021-1-18 18:52:52

suchocolate 发表于 2021-1-18 13:37


多谢老哥!{:10_281:}

头发 发表于 2021-1-18 19:57:53

suchocolate 发表于 2021-1-18 13:37


第一个数组正常,换下一个数组的时候,程序会报错:pymysql.err.InterfaceError: (0, '')
老哥你再爬一个url试下,就是把这俩的name和symbol写入
新url:
http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQFuturesData?page=1&num=5&sort=position&asc=0&node=pta_qh&base=futures

suchocolate 发表于 2021-1-18 20:31:18

头发 发表于 2021-1-18 19:57
第一个数组正常,换下一个数组的时候,程序会报错:
老哥你再爬一个url试下,就是把这俩的name和symbol ...

报错信息贴全

suchocolate 发表于 2021-1-18 20:59:41

头发 发表于 2021-1-18 19:57
第一个数组正常,换下一个数组的时候,程序会报错:
老哥你再爬一个url试下,就是把这俩的name和symbol ...

我尝试了这个新连接,可以爬到并保存到数据库中。
我这个只是案例,你需要根据你自己的数据实际情况修改数据库的名称,表名。
另外还需要确认一下id,列名。
如果还是有问题,请把你的全部代码发出来。

头发 发表于 2021-1-18 21:23:52

suchocolate 发表于 2021-1-18 20:59
我尝试了这个新连接,可以爬到并保存到数据库中。
我这个只是案例,你需要根据你自己的数据实际情况修改 ...

老哥,我刚才没描述清楚。
爬完下边两个url的数据,然后再一起存到mysql,也就是有两个json数组数据了{:10_254:}
http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQFuturesData?page=1&num=5&sort=position&asc=0&node=pta_qh&base=futures
http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQFuturesData?page=1&num=5&sort=position&asc=0&node=dlm_qh&base=futures

头发 发表于 2021-1-18 21:31:25

suchocolate 发表于 2021-1-18 20:59
我尝试了这个新连接,可以爬到并保存到数据库中。
我这个只是案例,你需要根据你自己的数据实际情况修改 ...

我想要把所有期货数据全爬下来,就会有好多个json数组。
老哥刚才给的程序存完第一个数组后就会报错:pymysql.err.InterfaceError: (0, '') 就不再继续存第二个json数组了

suchocolate 发表于 2021-1-19 08:34:06

头发 发表于 2021-1-18 21:31
我想要把所有期货数据全爬下来,就会有好多个json数组。
老哥刚才给的程序存完第一个数组后就会报错:py ...

你设一个循环,遍历多个url,爬到的数据先放在一个临时的列表里,等爬完所有url之后,再把数据存到数据库中。

头发 发表于 2021-1-19 11:37:32

suchocolate 发表于 2021-1-19 08:34
你设一个循环,遍历多个url,爬到的数据先放在一个临时的列表里,等爬完所有url之后,再把数据存到数据库 ...

我就是用循环把所有url里的数据爬下来了,然后用老哥给的方法存储,只能把第一个数组存储下来。
爬下的咋改成列表类型的呀

suchocolate 发表于 2021-1-19 12:47:04

头发 发表于 2021-1-19 11:37
我就是用循环把所有url里的数据爬下来了,然后用老哥给的方法存储,只能把第一个数组存储下来。
爬下的 ...

看不到你的代码,没法看哪里有错误,请把你的代码都发上来。
页: [1]
查看完整版本: 求大佬看看如何存储爬取到的json数组方便?