iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
1

抓下來的資料通常還要經過一系列的統計分析再呈現結果給使用者。這種資料一般稱為原始資料,大部分情況下抓回來後會儲存在所謂的 NoSQL 中。這兩天就會跟著大家一起建立並使用 MongoDB 來儲存資料。

安裝

可以選擇要在本機安裝獨立的資料庫實體或者使用 Docker 容器。

本機資料庫實體

參考官方的安裝說明下載完成後執行,下一步到底就可以了。

Docker 容器

直接使用官方的 MongoDB image

  1. 取得映像檔
docker pull mongo
  1. 啟動容器
docker run --name ithome-mongo -e MONGO_INITDB_ROOT_PASSWORD=mysecretpassword -v E:\ithome-2019\mongo:/data/db -d mongo

管理工具

可以使用官方的 MongoDB Compass 來作為 MongoDB 的管理工具。如果是用本機安裝的,預設就會包含了;如果是用 Docker 容器就需要到網站上下載。

初始化資料庫

  1. 進入管理工具後,先建立一個 Database。

https://ithelp.ithome.com.tw/upload/images/20191003/20107875Vf9vX8pNps.png

https://ithelp.ithome.com.tw/upload/images/20191003/201078751w0KYSzNqP.png

  1. 到剛剛建立的 Database 中,建立新的 Collection

https://ithelp.ithome.com.tw/upload/images/20191003/20107875z8fFLID9kP.png

因為不需要定義 metadata,所以到這邊就可以開始使用了。其實連 Collection 都可以不用建,執行過程中如果找不到就會自動建立了。

在程式中使用資料庫

  1. 進入虛擬環境
pipenv shell
  1. 安裝套件
pipenv install pymongo

https://ithelp.ithome.com.tw/upload/images/20191003/20107875UMnD0o17IY.png

  1. 寫扣!
from pymongo import MongoClient
from datetime import datetime

host = 'localhost'
dbname = 'ithome2019'

client = MongoClient(host, 27017)
print('資料庫連線成功!')

db = client[dbname]
article_collection = db.article

article = {
    'title': '【Day 0】前言',
    'url': 'https://ithelp.ithome.com.tw/articles/10215484',
    'author': 'Rex Chien',
    'publish_time': datetime(2019, 9, 15, 15, 50, 0),
    'tags': '11th鐵人賽,python,crawler,webscraping,scrapy',
    'content': '從簡單的商品到價提醒,到複雜的輿情警示、圖形辨識,「資料來源」都是基礎中的基礎。但網路上的資料龐大而且更新很快,總不可能都靠人工來蒐集資料。',
    'view_count': 129
}
article_id = article_collection.insert_one(article).inserted_id

print(f'資料新增成功!ID: {article_id}')

client.close()

執行之後就可以在資料庫中看到多了一筆紀錄,其中多了一個 _id 欄位,是由 MongdDB 自行產生的識別值,之後也會用這個欄位來跟回應做關聯。

https://ithelp.ithome.com.tw/upload/images/20191003/20107875oOpwVizR1V.png


明天會繼續把前兩天的程式碼修改成使用 MongoDB 的版本。


上一篇
【Day 17】資料持久化 - RDBMS (4/4)
下一篇
【Day 19】資料持久化 - NoSQL (2/2)
系列文
爬蟲在手、資料我有 - 30 天 Scrapy 爬蟲實戰33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言