python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/
Json数据处理
JSON支持数据格式:
对象(字典)。使用花括号。
数组(列表)。使用方括号。
整形、浮点型、布尔类型还有null类型。
字符串类型(字符串必须要用双引号,不能用单引号)。
多个数据之间使用逗号分开。
注意:json本质上就是一个字符串。
字典和列表转JSON:
import json
books = [
{
'title': '钢铁是怎样练成的',
'price': 9.8
},
{
'title': '红楼梦',
'price': 9.9
}
]
json_str = json.dumps(books,ensure_ascii=False)
print(json_str)
因为json在dump的时候,只能存放ascii的字符,因此会将中文进行转义,这时候我们可以使用ensure_ascii=False
关闭这个特性。
在Python中。只有基本数据类型才能转换成JSON格式的字符串。也即:int、float、str、list、dict、tuple。
将json数据直接dump到文件中:
json模块中除了dumps函数,还有一个dump函数,这个函数可以传入一个文件指针,直接将字符串dump到文件中。
books = [
{
'title': '钢铁是怎样练成的',
'price': 9.8
},
{
'title': '红楼梦',
'price': 9.9
}
]
with open('a.json','w') as fp:
json.dump(books,fp)
将一个json字符串load成Python对象:
json_str = '[{"title": "钢铁是怎样练成的", "price": 9.8}, {"title": "红楼梦", "price": 9.9}]'
books = json.loads(json_str,encoding='utf-8')
print(type(books))
print(books)
直接从文件中读取json:
import json
with open('a.json','r',encoding='utf-8') as fp:
json_str = json.load(fp)
print(json_str)
csv文件处理
读取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['turnoverVol'])
写入数据到csv文件:
写入数据到csv文件,需要创建一个writer对象,主要用到两个方法。一个是writerow
,这个是写入一行。一个是writerows
,这个是写入多行
import csv
headers = ['name','age','classroom']
values = [
('zhiliao',18,'111'),
('wena',20,'222'),
('bbc',21,'111')
]
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":'wenn',"age":20,"classroom":'222'},
{"name":'abc',"age":30,"classroom":'333'}
]
with open('test.csv','w',newline='') as fp:
writer = csv.DictWriter(fp,headers)
writer = csv.writeheader()
writer.writerow({'name':'zhiliao',"age":18,"classroom":'111'})
writer.writerows(values)
MySQL处理数据
安装驱动程序:
Python要想操作MySQL。必须要有一个中间件,或者叫做驱动程序。驱动程序有很多。比如有mysqldb、mysqlclient、pymysql等。在这里,我们选择用pymysql。安装方式也是非常简单,通过命令pip install pymysql即可安装。
数据库连接:
数据库连接之前。首先先确认以下工作完成,这里我们以一个pymysql_test数据库.以下将介绍连接mysql的示例代码:
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()
插入数据:
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'))
查找数据:
使用pymysql查询数据。可以使用fetch*方法。
fetchone():这个方法每次之获取一条数据。
fetchall():这个方法接收全部的返回结果。
fetchmany(size):可以获取指定条数的数据。
cursor = db.cursor()
sql = """
select * from user
"""
cursor.execute(sql)
while True:
result = cursor.fetchone()
if not result:
break
print(result)
db.close()
或者是直接使用fetchall
,一次性可以把所有满足条件的数据都取出来:
cursor = db.cursor()
sql = """
select * from user
"""
cursor.execute(sql)
results = cursor.fetchall()
for result in results:
print(result)
db.close()
或者是使用fetchmany
,指定获取多少条数据:
cursor = db.cursor()
sql = """
select * from user
"""
cursor.execute(sql)
results = cursor.fetchmany(1)
for result in results:
print(result)
db.close()
删除数据:
cursor = db.cursor()
sql = """
delete from user where id=1
"""
cursor.execute(sql)
db.commit()
db.close()
更新数据:
conn = pymysql.connect(host='localhost',user='root',password='root',database='pymysql_demo',port=3306)
cursor = conn.cursor()
sql = """
update user set username='aaa' where id=1
"""
cursor.execute(sql)
conn.commit()
conn.close()
MongoDB
将MongoDB制作成windows服务:
启动mongodb后,如果想让mongodb一直运行,那么这个终端便不能关闭,而且每次运行的时候还需要指定data的路径。因此我们可以将mongodb制作成一个服务,以后就通过一行命令就可以运行了。以下将讲解如何制作服务:
创建配置文件:在mongodb安装的路径下创建配置文件mongod.cfg(路径和名字不是必须和我这的一样),然后在配置文件中添加以下代码:
logpath=D:\ProgramApp\mongodb\data\log\mongod.log
dbpath=D:\ProgramApp\mongodb\data\db
logpath是日志的路径。dbpath是mongodb数据库的存储路径。
安装mongodb服务:
使用以下命令即可将mongodb安装成一个服务:
mongod --config "cfg配置文件所在路径" --install
比如:
mongod --config "D:\ProgramApp\mongodb\mongod.cfg" --install
启动mongodb:net start mongodb。
关闭mongodb: net stop mongodb。
移除mongodb:"D:\ProgramApp\mongodb\bin\mongod.exe" --remove。
MongoDB概念介绍:
SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
joins joins 表连接,MongoDB不支持
primary key/primary key 主键,MongoDB自动将_id字段设置为主键
MongoDB三元素:
三元素:数据库、集合、文档。
文档(document):就是关系型数据库中的一行。文档是一个对象,由键值对构成,是json的扩展形式:
{'name':'abc','gender':'1'}
集合(collection):就是关系型数据库中的表。可以存储多个文档,结构可以不固定。如可以存储如下文档在一个集合中:
{"name":"abc","gender":"1"}
{"name":"xxx","age":18}
{"title":'yyy','price':20.9}
MongoDB基本操作命令:
db:查看当前的数据库。
show dbs:查看所有的数据库。
use 数据库名:切换数据库。如果数据库不存在,则创建一个。(创建完成后需要插入数据库才算创建成功)
db.dropDatabase():删除当前指向的数据库。
db.集合名.insert(value):添加数据到指定的集合中。
db.集合名.find():从指定的集合中查找数据。 更多命令请见:http://www.runoob.com/mongodb/mongodb-tutorial.html
Python操作MongoDB:
安装pymongo:
要用python操作mongodb,必须下载一个驱动程序,这个驱动程序就是pymongo:
pip install pymongo
连接MongoDB:
import pymongo
# 获取连接的对象
client = pymongo.MongoClient('127.0.0.1',port=27017)
# 获取数据库
db = client.zhihu
# 获取集合(表)
collection = db.qa
# 插入一条数据到集合中
collection.insert_one({
"username":"abc",
"password":'hello'
})
数据类型:
类型 说明
Object ID 文档ID
String 字符串,最常用,必须是有效的UTF-8
Boolean 存储一个布尔值,true或false
Integer 整数可以是32位或64位,这取决于服务器
Double 存储浮点值
Arrays 数组或列表,多个值存储到一个键
Object 用于嵌入式的文档,即一个值为一个文档
Null 存储Null值
Timestamp 时间戳,表示从1970-1-1到现在的总秒数
Date 存储当前日期或时间的UNIX时间格式
操作MongoDB:
操作MongoDB的主要方法如下:
insert_one:加入一条文档数据到集合中。示例代码如下:
collection.insert_one({
"username":"abc",
"password":'hello'
})
insert_many:加入多条文档数据到集合中。
collection.insert_many([
{
"username":'abc',
'password':'111111'
},
{
"username":'bbb',
'password':'222222'
},
])
find_one:查找一条文档对象。
result = collection.find_one()
print(result)
# 或者是指定条件
result = collection.find_one({"username":"abc"})
print(result)
update_one:更新一条文档对象。
collection.update_one({"username":"abc"},{"$set":{"username":"aaa"}})
update_many:更新多条文档对象。
collection.update_many({"username":"abc"},{"$set":{"username":"aaa"}})
delete_one:删除一条文档对象。
collection.delete_one({"username":"abc"})
delete_many:删除多条文档对象。
collection.delete_one({"username":"abc"})
python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/的更多相关文章
- python 爬虫数据存入csv格式方法
python 爬虫数据存入csv格式方法 命令存储方式:scrapy crawl ju -o ju.csv 第一种方法:with open("F:/book_top250.csv" ...
- 爬虫数据存储——安装docker和ElasticSearch(基于Centos7)
爬虫数据存储--安装docker和ElasticSearch(基于Centos7) 先决条件 操作系统要求 要安装Docker Engine-Community,您需要一个CentOS 7的维护版本. ...
- python爬虫+数据可视化项目(关注、持续更新)
python爬虫+数据可视化项目(一) 爬取目标:中国天气网(起始url:http://www.weather.com.cn/textFC/hb.shtml#) 爬取内容:全国实时温度最低的十个城市气 ...
- python中级---->pymongo存储json数据
这里面我们介绍一下python中操作mangodb的第三方库pymongo的使用,以及简单的使用requests库作爬虫.人情冷暖正如花开花谢,不如将这种现象,想成一种必然的季节. pymongo的安 ...
- 04 爬虫数据存储之Mongodb
MongoDB 认识MongoDB MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系数据库和非关系数据 ...
- python数据存储--JSON
HTML正文存储为两种格式:JSON和CSV. 存储为JSON: 首先利用Requests访问http://seputu.com获取HTML文档: #!coding:utf-8 import requ ...
- Python中的文件处理和数据存储json
前言:每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其如此. 例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式并将其写入文件,让浏览器 ...
- python3之scrapy数据存储问题(MySQL)
这次我用的是python3.6,scrapy在python2.7,3.5的使用方法都不同所以要特别注意, 列如 在python3.5的开发环境下scrapy 的主爬虫文件可以使用 from urlli ...
- python的数据存储
Python存储数据 使用json.dump()和json.load() 不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭程序时,你几乎总是要保存他们提供的信息:一种简单 ...
随机推荐
- zan扩展安装
官方地址 https://github.com/youzan/zan //提示缺少libcurl扩展时候安装 yum install libcurl-devel //安装完zan.so php -m提 ...
- 设计模式:状态(State)模式
设计模式:状态(State)模式 一.前言 状态模式在某些场合中使用是非常方便的,什么叫做状态,如果大家学过<编译原理>就会明白DFA M和NFA M,在确定有限状态机和非确定有限 ...
- 在windows上安装nginx并注册
在windows上安装nginx并注册 一.前言 最近自己也尝试了一下在windows上安装nginx,其实非常的简单,这里算是备忘一下. 二.在windows下面安装 首先需要到nginx的 ...
- 手工执行sql tuning advisor和sql access advisor
sql tuning advisor:创建任务DECLARE my_task_name VARCHAR2(30); my_sqltext CLOB; BEGIN my_sqltext := 'SELE ...
- dynamic_cast动态转换
我们都知道dynamic_cast会在运行时进行类型检查,比较安全,static_cast静态转换,不安全 dynamic_cast转换的类型必须是个类,且这个类中必须有虚函数,为什么呢? 虚函数对于 ...
- IntelliJ IDEA中 查看某个类中的所有方法
方法一:alt + 7 方法二: ctrl + F12 方法三: 自定义 File Structure
- MVVM的本质:视图逻辑处理、视图管理、视数中间层
MVVM的核心是将原来Controller中的视图逻辑.视图管理.视数中间层的功能剥离出来,形成单独的模块: 大部分功能与视图相关.少部分与数据相关: 视图逻辑和业务逻辑不通: 解决的问题:UIVie ...
- [零基础学pythyon]安装python编程环境
不论什么高级语言都是须要一个自己的编程环境的,这就好比写字一样,须要有纸和笔,在计算机上写东西.也须要有文字处理软件,比方各种名称的OFFICE.笔和纸以及office软件,就是写东西的硬件或软件.总 ...
- BZOJ1996:[HNOI2010]CHORUS 合唱队(区间DP)
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 辣鸡guide真难用 ...
- PHP 生成全局唯一id
直接上代码: function generate_global_uniqid() { $prefix = md5(microtime(true)); // 生成唯一ID发生器 prefix,如果为服务 ...