鱼C论坛

 找回密码
 立即注册
查看: 1770|回复: 12

[已解决]求大佬看看如何存储爬取到的json数组方便?

[复制链接]
发表于 2021-1-18 13:37:36 | 显示全部楼层 |阅读模式
10鱼币
[
        {
                "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中?
求有经验的大佬们指点指点
最佳答案
2021-1-18 13:37:37

  1. import requests
  2. import pymysql


  3. def main():
  4.     # 准备数据库连接,假如已有数据库test,其中已有stock这个表
  5.     db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='test')
  6.     cursor = db.cursor()
  7.     sql = 'INSERT INTO stock(id, name, symbol) values(%s, %s, %s)'
  8.     # 获取数据
  9.     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'
  10.     headers = {'user-agent': 'firefox'}
  11.     r = requests.get(url, headers=headers)
  12.     j_data = r.json()
  13.     # 处理数据,拿name和symbol这2个值做例子
  14.     for n, i in enumerate(j_data):
  15.         nm = i['name']
  16.         sy = i['symbol']
  17.         print(nm)
  18.         print(sy)
  19.         # 写数据库
  20.         try:
  21.             cursor.execute(sql, (n, nm, sy))
  22.             db.commit()
  23.         except:
  24.             db.rollback()
  25.     db.close()


  26. if __name__ == '__main__':
  27.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-18 13:37:37 | 显示全部楼层    本楼为最佳答案   

  1. import requests
  2. import pymysql


  3. def main():
  4.     # 准备数据库连接,假如已有数据库test,其中已有stock这个表
  5.     db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='test')
  6.     cursor = db.cursor()
  7.     sql = 'INSERT INTO stock(id, name, symbol) values(%s, %s, %s)'
  8.     # 获取数据
  9.     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'
  10.     headers = {'user-agent': 'firefox'}
  11.     r = requests.get(url, headers=headers)
  12.     j_data = r.json()
  13.     # 处理数据,拿name和symbol这2个值做例子
  14.     for n, i in enumerate(j_data):
  15.         nm = i['name']
  16.         sy = i['symbol']
  17.         print(nm)
  18.         print(sy)
  19.         # 写数据库
  20.         try:
  21.             cursor.execute(sql, (n, nm, sy))
  22.             db.commit()
  23.         except:
  24.             db.rollback()
  25.     db.close()


  26. if __name__ == '__main__':
  27.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-18 13:43:01 | 显示全部楼层
数据格式不太对,你是如何获得这个数据的,我需要看下原始数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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

原始的就是上边网址里的数据 爬了很多个这种网址的,以json格式保存了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-1-18 18:52:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-1-18 19:57:53 | 显示全部楼层

第一个数组正常,换下一个数组的时候,程序会报错:
  1. 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

报错信息贴全
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我尝试了这个新连接,可以爬到并保存到数据库中。
我这个只是案例,你需要根据你自己的数据实际情况修改数据库的名称,表名。
另外还需要确认一下id,列名。
如果还是有问题,请把你的全部代码发出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


老哥,我刚才没描述清楚。
爬完下边两个url的数据,然后再一起存到mysql,也就是有两个json数组数据了
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我想要把所有期货数据全爬下来,就会有好多个json数组。
老哥刚才给的程序存完第一个数组后就会报错:pymysql.err.InterfaceError: (0, '') 就不再继续存第二个json数组了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你设一个循环,遍历多个url,爬到的数据先放在一个临时的列表里,等爬完所有url之后,再把数据存到数据库中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我就是用循环把所有url里的数据爬下来了,然后用老哥给的方法存储,只能把第一个数组存储下来。
爬下的咋改成列表类型的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

看不到你的代码,没法看哪里有错误,请把你的代码都发上来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表