python爬虫学习笔记之数据存储

参考博客:python爬虫学习笔记_fdk少东家的博客-CSDN博客

1、json文件处理:

1.01、什么是json:
JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁欸和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。


1.02、JSON支持数据格式:

  1. 对象(字典)。使用花括号。
  2. 列表(数组)。使用方括号。
  3. 整型、浮点型。
  4. 字符串类型(字符串必须要用双引号,不能用单引号)。

 多个数据之间使用逗号分开。

注意:json本质上就是一个字符串。

1.03、字典和列表转JSON:

import json
books = [
    {
        'title':'钢铁是怎么炼成的',
        'price':9.8
    },
    {
        'title':'红楼梦',
        'price':10.5
    }
]
json_str = json.dumps(books,ensure_ascii=False)
print(json_str)

因为jsondump的时候,只能存放ASCII的字符,因此会将中文进行转义,这时候我们可以使用ensure_ascii=False关闭这个特性。

python中。只有基本数据类型才能转换成JSON格式的字符串。也即:intfloatstrlistdicttuple

1.04、将json数据直接dump到文件中:

dump和dumps的区别就是:dump是直接到文件中,dumps是转换成json字符串。

json模块中除了dumps函数,还有一个dump函数,这个函数可以传入一个文件指针,直接将字符串dump到文件中。

import json
books = [
    {
        'title':'钢铁是怎么炼成的',
        'price':9.8
    },
    {
        'title':'红楼梦',
        'price':10.5
    }
]
with open('book.json','w',encoding='utf-8')as fp:
    json.dump(books,fp,ensure_ascii=False)

1.05、将一个json字符串load成python对象:

json_str = '[{"title":"钢铁是怎么炼成的","price":9.8},{"title":"红楼梦","price":10.5}]'
books = json.loads(json_str,encoding='utf-8')
print(type(books))
print(books)

1.06、直接从文件中读取json:

import json
with open('a.json',encoding='utf-8')as fp:
    json_str = json.load(fp)
    print(json_str)

2、csv文件处理:

2.01、读取csv文件:

import csv

with open('stock.csv','r')as fp:
    reader = csv.reader(fp)
    titles = next(reader)
    # 跳过标题行
    for x in reader:
        print(x)

这样操作,以后获取数据的时候,就要通过下标来获取数据,如果想要在获取数据的时候通过标题来获取。那么可以使用DictReader

import csv
with open('stock.csv','r')as fp:
    reader = csv.DictReader(fp)
    for x in reader:
        print(x['username'])

2.02、写入数据到csv文件:

写入数据到csv文件,需要创建一个writer对象,主要用到两个方法。一个是writerow,这个是写入一行。一个是writerows,这个是写入多行。

import csv
headers = ['name','age','classroom']
values = [
    ('fdk1',22,'111'),
    ('fdk2',23,'222'),
    ('fdk3',24,'333')
]
with open('test.csv','w',newline='')as fp:
    writer = csv.writer(fp)
    writer.writerow(headers)
    writer.writerows(values)

也可以使用字典的方式把数据写入进去。这时候就需要使用DictWriter了。

import csv
headers = ['name','age','classroom']
values = [
    {'name':'fdk1','age':22,'classroom':'111'},
    {'name':'fdk2','age':23,'classroom':'222'},
]
with open('test.csv','w',newline='')as fp:
    writer = csv.DictWriter(fp,headers)
    # 写入表头数据的时候,需要调用writeheader方法。
    writer.writeheader()
    writer.writerow({'name':'fdk1','age':22,'classroom':'111'})
    writer.writerows(values)

3、MySQL操作

3.01、数据库连接:

数据库连接之前。首先先确认以下工作完成,这里我们以一个pymysql_test数据库为例。

import pymysql
db = pymysql.connect(
	host='127.0.0.1',
    user='root',
    password='root',
    database='pymysql_test',
    port=3306
)
cursor = db.cursor()
cursor.execute('select 1')
data = cursor.fetchone()
print(data)
db.close()

3.02、插入数据:

import pymysql
db = pymysql.connect(
	host='127.0.0.1',
    user='root',
    password='root',
    database='pymysql_test',
    port=3306
)
cursor = db.cursor()
sql="""
insert into user(id,username,gender,age,password)values(null,'abc',1,18,'111111);
"""
cursor.execute(sql)
db.commit()
db.close()

如果在数据还不能保证的情况下,可以使用以下方式来插入数据:

sql = """
insert into user(id,username,gender,age,password)
values(null,%s,%s,%s,%s);
"""
cursor.execute(sql,('spider',1,20,'222222'))

3.03、查找数据:

使用pymysql查询数据。可以使用fetch*方法。

  1. fetchone():这个方法每次只获取一条数据。.
  2. fetchall():这个方法接收全部的返回结果。
  3. fetchmany(size):可以获取指定数量的数据。
result = cursor.fetchone()
# result = cursor.fetchall()
# result = cursor.fetchmany(3) 获取3条

3.04、删除数据:

cursor.db.cursor()
sql="""
delete drom user where id=1
"""
cursor.execute(sql)
db.commit()
db.close()

3.05、更新数据:

sql="""
update user set username='aaa' where id=1
"""
cursor.execute(sql)
db.commit()
db.close()

4、MongoDB数据库操作:

MongoDB是一个基于分布式文件存储的NoSQL数据库。在处理海量数据的时候会比MySQL更有优势。爬虫如果上一个量级,可能就会比较推荐使用MongoDB,当然没有上量的数据也完全可以使用MongoDB来存储数据。因此学会使用MongoDB也是爬虫开发工程师必须掌握的一个技能。

4.01、MongoDB概念介绍:

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
joins joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

###4.02、MongoDB三元素:

三元素:数据库、集合、文档。

1.文档(document):就是关系型数据库中的一行。文档是一个对象,由键值对构成,是json的扩展形式。

{'name':'abc','age':18}

2.集合(collection):就是关系型数据库中的表。可以存储多个文档,结构可以不固定。如可以存储如下文档在一个集合中。

{'name':'abc','age':18}
{'name':'xxx','gender':'1'}
{'title':'yyy','price':20.9}

4.03、MongoDB基本操作命令:

  1. db:查看当前的数据库。
  2. show dbs:查看所有的数据库。
  3. use 数据库名:切换数据库。如果数据库不存在,则创建一个。(创建完成后需要插入数据库才算创建成功)
  4. db.dropDatabase():删除当前指向的数据库。
  5. db.集合名.insert(value):添加数据到指定集合中。
  6. db.集合名.find():从指定的集合中查找数据。

 更多命令:MongoDB 教程 | 菜鸟教程

4.04、Python操作MongoDB

4.04-1、安装pymongo

要用python操作mongodb,必须下载一个驱动程序,这个驱动程序就是pymongo

pip install pymongo

4.04-2、连接MongoDB

import pymongo
#获取连接的对象
client = pymongo.MongoClient('127.0.0.1',port=27017)
#获取数据库
db = client.test
#获取集合(表)
collection = db.qa
#插入一条数据到集合中
collection.insert_one({
    'username':'abc',
    'password':'111111'
})

4.04-3、数据类型:

类型 说明
Object ID 文档ID
String 字符串,最常用,必须是有效的UTF-8
Boolean 存储一个布尔值,true或false
Integer 整数可以是32位或64位,取决于服务器
Double 存储浮点型
Arrays 数组或列表,多个值存储到一个键
Object 用于嵌入式的文档,即一个值为一个文档
Null 存储Null值
Timestamp 时间戳,表示从1970-1-1到现在的总秒数
Date 存储当前日期或事件的UNIX时间格式

4.04-4、操作MongoDB

操作MongoDB的主要方法如下:

1.insert_one:加入一条文档数据到集合中。

collection.insert_one({
    'username':'abc',
    'password':'111111'
})

2.insert_many:加入多条文档到集合中。

collection.insert_many([
    {
    	'username':'abc',
    	'password':'111111'
	},
    {
    	'username':'aaa',
    	'password':'123123'
	},
])

3.find_one:查找一条文档对象。

result = collection.find_one()
print(result)
#或者是指定条件
result = collection.find_one({'username':'aaa'})
print(result)

4.update_one:更新一条文档对象。

#前面是条件,后面字典是要设置的东西。
collection.update_one({'username':'abc'},{'$set':{'username':'aaa'}})

5.update_many:更新多条文档对象。

collection.update_many({'username':'abc'},{'$set':{'username':'aaa'}})

6.delete_one:删除一条文档对象。

collection.delete_one({'username':'abc'})

7.delete_many:删除多条文档对象。

#删除符合条件的所有数据
collection.delete_many({'username':'abc'})

你可能感兴趣的:(笔记,python,爬虫)