2024年Python最新Python爬虫之数据的存储,2024年最新2024京东最新Python面试真题解析

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

二、JSON文件存储

JSON,全称:JavaScript Object Notation,也就是JavaScript对象标记,通过对象和数组的组合来表示数据,是一种轻量级的数据交换方式

1、对象和数组

  • 对象在JavaScript中是指用花括号{}包围起来的内容,数据结构是{key1:value1,key2:value2,…}这种键值对结构。在面向对象的语言中,key表示对象的属性,value表示属性对应的值,前者可以使用整数和字符串表示,后者可以是任意类型。
  • 数组在JavaScript中是指用[]包围起来的内容,数据结构是[“java”,“javascript”,“vb”,…]这种索引结构。
# 这是一个JSON对象
[{
	"name":"Bob",
	"gender":"male",
	"birthday":"1992-10-18"
},{
	"name":"Selina",
	"gender":"female",
	"birthday":"1995-10-18"
}]

2、读取JSON

可以调用JSON库中的loads方法将JSON文本字符串转为JSON对象。实际上,JSON对象就是Python中列表和字典的嵌套与组合。反过来,我们可以通过dumps方法将JSON对象转为文本字符串。

print(type(str))	# <class 'str'>
data = json.loads(str)
print(data)	
print(type(data))	# <class 'list'> 列表类型

可以用索引取值:

data[0]['name']
data[0].get('name')
# 推荐使用get方法,即使键名不存在也不会报错。

  • 注意、JSON的数据需要用双引号包围起来,而不能使用单引号。
# 读取JSON文本文件 法1:
with open('data.json',encoding='utf-8') as file:
    str = file.read()
    data = json.loads(str)
    print(data)
    
# 读取JSON文本文件 法2:
data = json.load(open('data.json',encoding='utf-8'))
print(data) 

3、输出JSON

调用dumps方法将JSON对象转化为字符串。

import json

data = [{
    'name':'Bob',
    'gender':'male',
    'birthday':'1992-10-18'
}]
with open('data.json','w',encoding='utf-8') as file:
    file.write(json.dumps(data))

  • 若想保存JSON对象的缩进格式,可以再往dumps方法中添加一个参数indent,代表缩进字符的个数。
with open('data.json','w',encoding='utf-8') as file:
    file.write(json.dumps(data,indent=2))

要想输出中文,还需要指定参数ensure_ascii为False,以及规定文件输出的编码:

with open('data.json','w',encoding='utf-8') as file:
    file.write(json.dumps(data,indent=2,ensure_ascii=False))

三、CSV文件存储

CSV,全称Comma-Separated Values,中文叫做逗号分隔值或字符分隔值,其文件以纯文本形式****存储表格数据

1、写入

import csv

with open('data.csv','w') as csvfile:	# 打开data.csv文件,指定模式为写入。
    writer = csv.writer(csvfile)		# 使用csv库的writer方法初始化对象
    writer.writerow(['id','name','age'])# 调用writerow方法传入每行的数据
    writer.writerow(['10001','Mike','20'])
    writer.writerow(['10002','Bob','22'])
    writer.writerow(['10003','Jordan','21'])

  • 若要修改列与列之间的分隔符,传入delimiter参数
with open('data.csv','w') as csvfile:
    writer = csv.writer(csvfile,delimiter=' ')
    writer.writerow(['id','name','age'])

  • 也可调用writerows写入多行,此时参数需要传入二维列表:
with open('data.csv','w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id','name','age'])
    writer.writerow([['10001','Mike','20'],['10002','Bob','22'],['10003','Jordan','21']])

  • 一般情况下,爬虫爬取到的都是结构化数据,我们一般会用字典表示这种数据。csv也提供了字典的写入方式。
with open('data.csv','w') as csvfile:
    fieldnames = ['id','name','age']
    writer = csv.DictWriter(csvfile,fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'id':'10001','name':'Mike','age':'20'})
    writer.writerow({'id':'10002','name':'Bob','age':'22'})
    writer.writerow({'id':'10003','name':'Jordan','age':'21'})
    
# 需要追加模式则w改为a
# 要写入中文则,添加编码格式encoding='utf-8' 

2、读取

with open('data.csv','r',encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

四、MySql存储

  • 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库中数据的存储方式就是行列组成的 表,每一列代表一个字段,每一行代表一条记录。
  • 表可以看做某个实体的集合,实体之间存在的联系需要通过表与表之间的关联关系体现。

1、准备工作

pip3 install pymysql

2、连接数据库

import pymysql

db = pymysql.connect(host='127.0.0.1', user='root', password='password', port=3306)
cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:', data)

# 创建数据库
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8mb4")
db.close()

# 通过pymysql的connect方法声明了一个MySQL对象db,传入MySQL运行的host、user(用户名)、password(密码)、port(端口号)。
# 连接成功后,调用cursor方法获得MySQL的操作游标,利用游标可以执行MySQL语句。
# 第一个SQL语句用于获得MySQL的当前版本,然后调用fetchone方法得到了第一条数据,即版本号
# 第二个SQL语句用于创建数据库spiders,默认编码为UTF-8。

3、创建表

db = pymysql.connect(host='127.0.0.1', user='root', password='password', port=3306,db= 'spiders')
cursor = db.cursor()
# 创建一个名为students的数据表
sql = 'CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))'
cursor.execute(sql)
db.close()

4、插入数据

data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 20
}
table = 'students'
keys = ','.join(data.keys())		# id,name,age
values = ','.join(['%s'] \* len(data))	# %s,%s,%s
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
try:
    if cursor.execute(sql, tuple(data.values())):
        print('Successful')
        db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

# 首先构造需要插入的字段:id,name和age。

5、更新数据

data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 21
}
table = 'students'
keys = ','.join(data.keys())
values = ','.join(['%s'] \* len(data))

sql = 'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE '.format(table=table, keys=keys, values=values)
update = ','.join(["{key} = %s".format(key=key) for key in data])
sql += update


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值