zoukankan      html  css  js  c++  java
  • 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用

    【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用

    广东职业技术学院  欧浩源

    1、引言

        网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQLMongoDBRedis等。对于爬取返回为JSON格式的数据,选择NoSQL非关系型数据库MongoDB来存储会容易很多。在本文中,首先介绍MongoDB数据库的安装与启动,然后讲述该数据库的基本操作,接着用Python语句操作该数据库,最后将“豆瓣电影TOP250”爬虫搜集的数据存到到该数据库中,由浅入深,从理论到实践,全面掌握MongoDB数据库的基本应用。

    2、什么是MongoDB数据库?

        MongoDB是一款由C++语言编写,基于分布式文件存储的NoSQL数据库,具有免费、操作简单、面向文档存储、自动分片、可扩展性高、查询功能强大等特点,旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值对(key--value)组成。MongoDB的文档类似于JSON对象,如果你不懂JSON对象的话,也可以理解为Python中的字典

    3、MongoDB的下载与安装

    【1】进入官方网站:www.mongodb.com,进入download页面,选择“community sever”标签,下载windows的msi版本。

    【2】双击下载后的安装程序,选择“Complete”安装完整版本。这个过程非常简单,除了“下一步”就是最后的“完成”。完成后,程序默认安装在“C:Program FilesMongoDB中”。

       

    【3】在C盘创建两个文件夹,分别为:"C:MongoDBDatadb"和"C:MongoDBDatalog",作为数据日志的文件夹。db文件夹存放MongoDB的数据库,log文件夹存放数据库的操作记录。在log文件夹中创建一个日志文件mongodb.log。

    【4】创建MongoDB的数据库文件。以管理员身份打开cmd控制台,将当前路径切换到MongoDB的安装目录的bin目录,即“C:Program FilesMongoDBServer3.4in”。在路径下输入“mongod.exe --dbpath c:MongoDBDatadb”。该命令将MongoDB的数据库文件创建到已经建好的db文件夹中。如果创建成功,可以看到具体的信息。

    【5】MongoDB主要的启动方式有两种:以程序的方式打开和以Windows服务的方式打开。在实际使用中,用Windows服务的方式打开会比较方便。首先以管理员的身份运行cmd控制台,并且把当前目录切换到MongoDB安装目录的bin目录,然后输入:

    mongod.exe --logpath "C:MongoDBDatalogmongodb.log" --logappend --dbpath "c:MongoDBDatadb" --serviceName "MongoDB" --install
    通过这个指令安装Windows服务运行模式,其中“MongoDB”为服务器名称。然后通过输入“net start MongoDB”指令,启动MongoDB。

        如果看到上述的信息,则表示MongoDB已经成功启动了。如果你打开计算机管理系统的服务模块,能清楚看到MongoDB已经启动了。

        到这里,关于MongoDB的下载、安装、配置、启动已经全部完成,接下来就可以自由的使用了。在下一次打开电脑的时候,并不需要再次输入配置和启动命令,直接进入MongoDB安装目录下的bin文件夹,双击“Mongo.exe”即可打开数据库的交互窗口,即Mongo Shell

        为了测试MongoDB是否打开成功,可在提示符下输入“show dbs”查看所有的数据库。如果成功的话,你能看到以下的返回信息。

    5、MongoDB的基本操作

    【1】查看当前数据库名称:db
    【2】查看所有数据库名称:show dbs
    【3】切换数据库:use 数据库名称
        如果数据不存在,则则指向数据库,但不创建,直到插入数据或创建集合时,数据库才被创建。默认的数据库为test。如果你没有创建新的数据库,集合将存放在test数据库中。
    【4】删除当前数据库:db.dropDatabase()
        删除当前指向的数据库,如果数据库不存在,则什么也不做。
    【5】创建集合:db.createCollection(name ,option)
        不限制集合大小,如:db.createCollection("student")
        限制集合大小,如:db.createCollection("student",{capped:true,size:10})
    【6】查看当前数据库的集合:show collections
    【7】删除集合:db.集合名称.drop()
    例1:查看当前的数据库,并切换到“spider01”数据,然后在该数据库中创建集合“student”,最后查看当前数据库中的集合。

    【8】插入数据:db.集合名称.insert(document)
        如:db.stu.insert({name:"Marry", age:21})
    【9】保存数据:db.集合名称.save(document)
    【10】全文档数据更新:
        db.集合名称.update(
            <query>,
            <update>,
            {multi : <boolean>}
        )
        第1个参数:查询条件,即要修改那些数据。
        第2个参数:更新内容,即改为什么数据。
        第3个参数:可选,是否多行更新,默认为false,更新一行。
    【11】指定属性更新:
        语法如上,通过操作符$set,指定更新的属性。
    【12】删除数据:
        db.集合名称.update(
            <query>,
            {justone : <boolean>}
        )
        第1个参数:查询条件,要删除的数据。
        第2个参数:默认为false,删除多条数据。
    【13】简单查询:db.集合名称.find({条件文档})
    【14】返回第一个查询结果:db.集合名称.findOne({条件文档})
    【15】将结果格式化输出:db.集合名称.find({条件文档}).pretty()

    【16】查询集合的记录总数:db.集合名称.find().count()
    例2:向“student”集合中插入三条数据,通过简单查询显示该集合的数据。

    例3:将“name”为“Peter”的文档删除,将name为“Marry”的“age”改为65,通过查询,将查询结果格式化输出,最后将所有文档删除,在通过简单查询确认。

    【17】退出MongoDB数据库:quit()

    6、PyMongo库的安装与引入

        按装PyMongo库就可以使用Python语言操作MongoDB数据库了。其安装方式非常简单:
        pip install pymongo
        安装完成后,从pymongo中引入MongoClient:
        from pymongo import MongoClient
        然后,就可以使用Python对MongoDB数据进行各种操作了。

    7、PyMongo库的基本操作

        操作MongoDB数据库之前,首先需要连接MongoDB客户端,然后连接数据库,如果该数据库不存在,就会创建一个数据库;接着选择数据集合,如果该集合不存在,也会创建一个;然后才能进行数据操作。

    例4:连接MongoDB客户端,然后连接数据库“spider01”,选择数据集合"student"。

    【1】插入单条记录:insert_one()
    例5:向"student"集合中插入一条学生记录。

    【2】插入多条记录:insert_many()
        在该方法中,要插入的记录以列表的形式进行传递。
    例6:向"student"集合中插入三条学生记录。

    【3】查找单条记录:find_one()
    例7:查询"student"集合中,age为28的记录中的第一条。

    【4】查找多条记录:find_many()
    例8:查询"student"集合中,age为28的所有记录。

    【5】查询所有记录find()
    例9:查询"student"集合的所有记录。

    【6】更新单条记录:update_one()
    例10:将"student"集合中,name为“李四”的记录的“scorce”的值修改为66.6。

    【7】更新多条记录:update_many()
    例11:将"student"集合中,age为28的记录的“scorce”的值修改为88.8。

    【8】删除单条记录:delete_one()
    例12:将"student"集合中,name为"李四"的记录删除。

    【9】删除多条记录:delete_many()
    例13:将"student"集合的所有记录删除。

        熟练掌握了数据库的增、删、查、改的基本操作之后,再去学习和提升就不会存在太大的障碍了。实际上使用pymongo库来操作数据库是非常简单的,将来碰到更加复杂的需求,在网络上查一下官方文档或者技术博客,应该都能很快的顺利解决。

    7、MongoDB的爬虫应用

        在【网络爬虫入门01】中,应用Requests和BeautifulSoup技术实现了从“豆瓣电影TOP250”中将电影名称豆瓣评分相关链接爬取下来,并保存到文本文件中的网络爬虫。在这里我们对其进行升级一下,把爬取下来的目标数据存储到MongoDB数据库中,其实现的思路很简单:
        <1> 引入pymogo库。
        <2>连接服务器和数据库。
        <3>选择数据集合进行增、删、查、改操作。
        从实现代码来看,把爬取到的数据存储到数据库只需要一行代码。这个网络爬虫跟MongoDB数据库相关的代码,也就下面几句:

        整个网络爬虫的实现代码如下:

        到底爬虫获取的数据有没有存储到数据库中指定的集合中呢?我们可以打开mongo.exe的交互终端进行查看。

        如果你觉得上面通过交互终端进行数据查询很不方便,你也可以利用Python语句编写代码,查询集合中“评分”为“9.5分”的记录。其实现代码也相当的简洁:

        如果要将上述代码放到爬虫里面,在程序将数据向数据库存储完毕之后,再读出其中“评分”为“9.5分”的记录作为验证。整个代码可以这样实现:

    8、小结

        在大数据处理时代中,MongoDB的地位将会非常突出,关键它学起来也不难,如果结合Python语句进行开发应用,其效率是非常高的。在网络爬虫的应用中,对于关联度很低、结构很松散的数据,特别是一些JSON格式的数据,使用MongoDB来存储数据那是再完美不过了。

    9、附件:源码

    import requests
    from bs4 import BeautifulSoup
    from pymongo import MongoClient
    db = client.spider01
    collection = db.movie250
    user_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;)"
    headers = {"User-Agent":user_agent}
    url = "https://movie.douban.com/top250?start="
    for i in range(0,10):
        fullurl = url + str(i * 25)
        res = requests.get(fullurl, headers = headers)
        soup = BeautifulSoup(res.text, "lxml")
        mlist = soup.find_all('div', {'class':'info'})
        for m in mlist:
            title = m.find('a').find('span').text
            score = m.find('div',class_='star').find('span',class_='rating_num').text + ''
            link = m.find('a')['href']
            dat = {'电影':title,'评分':score,'链接':link}
            collection.insert_one(dat)
    print("====豆瓣电影TOP250数据爬取分析保存完毕====")
    cursor = collection.find({'评分':'9.5分'})
    for doc in cursor:
        print(doc)
    print("*** 广东职业技术学院-欧浩源-2017年10月 ***")
  • 相关阅读:
    【POJ 2259】Team Queue【队列】
    【POJ 2259】Team Queue【队列】
    【HDU 4699】Editor【栈】
    【HDU 4699】Editor【栈】
    【HDU 4699】Editor【栈】
    【POJ 2559】Largest Rectangle in a Histogram【栈】
    数据结构实验之栈八:栈的基本操作
    数据结构实验之栈八:栈的基本操作
    数据结构实验之栈七:出栈序列判定
    数据结构实验之栈七:出栈序列判定
  • 原文地址:https://www.cnblogs.com/ALittleBee/p/7707509.html
Copyright © 2011-2022 走看看