zoukankan      html  css  js  c++  java
  • 爬虫与Python:(四)爬虫进阶二之数据存储(数据库存储)——6.MongoDB存储

    MongoDB是由C++ 语言编写的,它是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,开源保证服务器的性能。MongoDB旨在为Web服务器提供可扩展性的存储解决方案。它将数据存储为一个文档,数据由键值(key => value)组成。MongoDB文档类似于JSON对象。字段值开源包含其他文档、数组及文档数组。

    基于这些优势,所以经常在爬虫中涉及数据保存到MongoDB中,以便数据清洗。要确保已安装MongoDB。安装教程详见:https://www.cnblogs.com/luyj00436/p/15514788.html

    安装驱动

    在Python中,要连接和使用mongoDB,就需要MongDB驱动,这里使用PyMongoDB驱动来连接。用户可以使用pip命令来安装。

    python3 -m pip3 install pymongo

    安装完成后,创建一个测试文件demo_test_mongodb.py。执行以下代码,如果没有出现错误,则表示安装成功。

    import pymongo

    1. 创建数据库

    创建数据库需要使用MongoClient对象,并且指定连接的URL地址和数据库名称。在以下示例中,创建数据test_db。

    1 import pymongo
    2 
    3 # 创建数据库
    4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
    5 mydb = myclient["test_db"]

    2. 创建集合

    MongoDB的集合类似SQL 的表。MongoDB使用数据库来创建集合,示例代码如下:

    1 import pymongo
    2 
    3 # 创建集合
    4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
    5 mydb = myclient["test_db"]
    6 mycol = mydb["site"]    # 创建集合

    在MongoDB中,集合只有自内容插入后才会创建。也就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正的创建。

    3. 插入文档

    MongoDB中的一个文档类似SQL表中的一条记录。在集合中插入文档使用insert_one()方法,该方法的第一个参数是字典name=>value对。以下示例向sites集合中插入文档。

     1 import pymongo
     2 
     3 # 插入文档
     4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
     5 mydb = myclient["test_db"]
     6 mycol = mydb["site"]    # 创建集合
     7 
     8 mydict = {"name":"张三", "age":23 , "gender":""}
     9 x = mycol.insert_one(mydict)
    10 print(x)

    运行后控制台会输出:

    4. 插入多个文档

    在集合中插入多个文档适用insert_many()方法,该方法的第一参数是字典列表,示例代码如下:

     1 import pymongo
     2 
     3 # 插入多个文档
     4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
     5 mydb = myclient["test_db"]
     6 mycol = mydb["site"]    # 创建集合
     7 
     8 mylist =[
     9     {"name":"张三","age":23,"gender":""},
    10     {"name":"李四","age":23,"gender":""},
    11     {"name":"张三","age":23,"gender":""},
    12     {"name":"张三","age":23,"gender":""},
    13 ]
    14 x = mycol.insert_many(mylist)
    15 # 输入插入的所有文档对应的id值
    16 print(x.inserted_ids)

    运行后控制台输出:

    5.  查询文档

    MongoDB使用了find和find_one方法来查询集合中的数据,它类似SQL中的SELECT语句。用户可以使用find_one()方法来查询集合中的一条数据,下面查询sites文档中的一条数据,代码如下:

    1 import pymongo
    2 
    3 # 查询单个文档
    4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
    5 mydb = myclient["test_db"]
    6 mycol = mydb["site"]
    7 
    8 x = mycol.find_one()
    9 print(x)

    运行后,控制台会输出当前值:

    {'_id': ObjectId('6185268a346c50e66086702c'), 'name': '张三', 'age': 23, 'gender': ''}

    6. 查询集合中所有数据

    find()方法可以查询集合中所有数据,类似于SQL中的SELECT * 操作。以下示例代码查找sites集合中的所有数据。

    1 import pymongo
    2 
    3 # 查询集合中所有数据
    4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
    5 mydb = myclient["test_db"]
    6 mycol = mydb["site"]
    7 
    8 for x in mycol.find():
    9     print(x)

    7.修改数据

    用户可以在MongoDB中使用update_one()方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。如果查找到的匹配数据多于一条,则会修改第一条。

     1 import pymongo
     2 
     3 # 修改第一条name等于张三的属性为age为20
     4 myclient = pymongo.MongoClient("mongodb://localhost:27017")
     5 mydb = myclient["test_db"]
     6 mycol = mydb["site"]
     7 
     8 myquery={"name":"张三"}
     9 newvalues = {"$set":{"age":20}}
    10 mycol.update_one(myquery , newvalues)
    11 
    12 for x in mycol.find():
    13     print(x)
    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
  • 相关阅读:
    (转)C# DllImport的用法
    (转)C#网络编程(异步传输字符串) Part.3
    (转)C#网络编程(订立协议和发送文件) Part.4
    C# tostring()汇总
    (转)C#网络编程(基本概念和操作) Part.1
    (转)关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现
    C# sql server 数据库备份和还原
    (转)C#网络编程(接收文件) Part.5
    2010年5月学习计划
    APUE学习笔记 Chapter 2 . Unix Standardization and Implementations
  • 原文地址:https://www.cnblogs.com/luyj00436/p/15434351.html
Copyright © 2011-2022 走看看