• 爬虫与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)
    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
  • 相关阅读:
    第14.15节 爬虫实战1:使用Python和selenium实现csdn博文点赞
    第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析
    第14.13节 BeautifulSoup的其他功能导览
    Mina源码阅读笔记(四)—Mina的连接IoConnector1
    H3C SecPath F100-C 防火墙配置说明
    基于数据仓库星形模式的广东省高速公路一张网资金结算情况分析系统
    祝贺自己的软件《万能数据库查询分析器》在中关村在线下载量超过10万次
    DB Query Analyzer has been downloaded more than 100,000 times
    图像处理程序框架—MFC相关知识点
    Graph Cuts学习笔记2014.5.16----1
  • 原文地址:https://www.cnblogs.com/luyj00436/p/15434351.html
Copyright © 2020-2023  润新知