【網絡爬蟲入門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 Files\MongoDB中”。

   

【3】在C盤創建兩個文件夾,分別為:"C:\MongoDBData\db"和"C:\MongoDBData\log",作為數據日志的文件夾。db文件夾存放MongoDB的數據庫,log文件夾存放數據庫的操作記錄。在log文件夾中創建一個日志文件mongodb.log。

【4】創建MongoDB的數據庫文件。以管理員身份打開cmd控制台,將當前路徑切換到MongoDB的安裝目錄的bin目錄,即“C:\Program Files\MongoDB\Server\3.4\bin”。在路徑下輸入“mongod.exe --dbpath c:\MongoDBData\db”。該命令將MongoDB的數據庫文件創建到已經建好的db文件夾中。如果創建成功,可以看到具體的信息。

【5】MongoDB主要的啟動方式有兩種:以程序的方式打開和以Windows服務的方式打開。在實際使用中,用Windows服務的方式打開會比較方便。首先以管理員的身份運行cmd控制台,並且把當前目錄切換到MongoDB安裝目錄的bin目錄,然后輸入:

mongod.exe --logpath "C:\MongoDBData\log\mongodb.log" --logappend --dbpath "c:\MongoDBData\db" --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月 ***")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM