網絡爬蟲 第六章 數據存儲


概述

主要是介紹兩種存儲數據的方法
(1)存儲在文件中,包括TXT文件CSV文件
(2)存儲在數據庫中,包括MySQL關係數據庫MongoDB數據庫
返回



一、基本存儲:存儲至TXT或CSV

1、把數據存儲至TXT

title = "This is a test sentence."
with open('title.txt', "a+") as f:
    f.write(title)
    f.close()

在這裏插入圖片描述
有時需要把幾個變量寫入TXT文件中,這時分隔符就比較重要了。可以採用Tab進行分隔,因爲在字符串中一般不會出現Tab符號。我們可以使用join函數將變量連接成一個字符串。
Python中有.join()os.path.join()兩個函數,具體作用如下:
. join(): 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串
os.path.join(): 將多個路徑組合後返回

>>#對序列進行操作(分別使用'  ' 、' - '與':'作爲分隔符)
>> a=['1','2','3','4','5']
>> '  '.join(a)
1 2 3 4 5
>>';'.jion(a)
1-2-3-4-5
>>'.'.join(a)
1.2.3.4.5
>>#對字符串進行操作(分別使用'  ' 、' - '與':'作爲分隔符)
>>b='hello world'
>> '  '.join(b)
h e l l o   w o r l d
>>'-' .join(b)
h-e-l-l-o- -w-o-r-l-d
>>':'.jion(b)
h:e:l:l:o: :w:o:r:l:d
>>#對元組進行操作(分別使用'  ' 、' - '與':'作爲分隔符)
>>c=('1','2','3','4','5')
>>'  '.join(c)
1 2 3 4 5
>>'-'.join(c)
1-2-3-4-5
>>':'.join(c)
1:2:3:4:5
>>#對字典進行無序操作(分別使用'  ' 、' - '與':'作爲分隔符)
>>d={'name1':'a','name2':'b','name3':'c','name4':'d'}
>>'  '.join(d)
name1 name2 name3 name4
>>'-'.join(d)
name1-name2-name3-name4
>>':'.join(d)
name1:name2:name3:name4
>>#對目錄進行操作
>> import os
>>os.path.join('/hello/','good/date','datbody')
hello/good/date/datbody

2、把數據存儲至CSV

CSV(Comma-Separated Values)是逗號分隔值的文件格式,其文件以純文本的形式存儲表格數據(數字和文本)。CSV文件的每一行都用換行符分隔,列與列之間用逗號分隔。
相對於TXT文件,CSV文件既可以用記事本打開,又可以用Excel打開,表現爲表格格式。CSV的使用分爲讀取寫入兩個方面,首先介紹CSV的讀取。
假如我們創建了一個Excel文件,裏面的表格是4 x 4的:
在這裏插入圖片描述
之後存爲CSV,文件名爲test1.csv,嘗試從中讀取數據:

import csv
with open('test1.csv', 'r', encoding='UTF-8') as csvfile:
    csv_reader = csv.reader(csvfile)
    for row in csv_reader:
        print(row)
        print(row[0])

結果如下:
在這裏插入圖片描述
可見,csv_reader把每一行數據轉化成了一個列表(list),列表中從左至右的每個元素是一個字符串。接下來我們使用writerow()方法把一個列表直接寫入一列中:

import csv

output_list = ['1', '2', '3', '4']

with open('test2.csv', 'a+', encoding='UTF-8', newline='') as csvfile:
    w = csv.writer(csvfile)
    w.writerow(output_list)

結果如下:
在這裏插入圖片描述
返回



二、存儲至MongoDB數據庫

在網絡爬蟲的時候需要存儲大量數據,而且有時爬取返回的數據是JSON格式,這時選擇使用NoSQL數據庫存儲就容易多了。NoSQL泛指非關係型數據庫。相比於關係數據庫MySQL,NoSQL自誕生之初就容易擴展,數據之間無關係,具有非常高的讀寫性能。

(1)下載安裝MongoDB

MongoDB是一款基於分佈式文件存儲的數據庫,本身就是爲了爲Web應用提供可擴展的高性能數據存儲。因此,使用MongoDB存儲網絡爬蟲再合適不過了。

下面介紹Windows系統下的安裝:

首先下載MongoDB,下載windows的msi版本:
https://www.mongodb.com/download-center/community
在這裏插入圖片描述
然後,根據提示來安裝,可以選擇Complete安裝完整版本,也可以選擇Custom自己定製安裝。爲了方便,建議選擇Complete。
然後我們會看到出現了兩個文件夾,其中data文件夾是用來存放MongoDB數據庫的(database),log文件夾用來存放數據庫的操作記錄。

在這裏插入圖片描述
接下來,就是啓動MongoDB了,有兩種方式,這裏我介紹一種較爲簡單的方式,以Windows服務的方式打開。我們需要以管理員的身份運行cmd.exe,注意一定要是管理員的身份,輸入:

net start MongoDB

然後看到下面的界面就代表已經成功啓動了。
在這裏插入圖片描述

(2)MongoDB的基本概念

爲了更好地理解MongoDB的基本概念,如文檔、集合和數據庫,我們可以將MongoDB和SQL的一些概念進行比較:
在這裏插入圖片描述
我們可以使用SQL的概念理解MongoDB,如MongoDB中的集合(collection)類似MySQL中的表格,文檔(document)類似MySQL中的數據記錄行(row),域(field)類似MySQL中的數據字段(column)
不過MongoDB和SQL數據庫有很大區別,MongoDB的文檔不需要設置相同的子段,並且相同的子段不需要相同的數據類型。

(3)Python操作MongoDB數據庫

我們需要用pip安裝PyMongo庫,連接Python和MongoDB。在命令行輸入:

pip intsall pymongo

安裝完成後,可以嘗試用python操作MongoDB,監測能否正常連接到數據庫:

from pymongo import MongoClient
client = MongoClient('localhost',27017)
db = client.blog_database
collection = db.blog

首先,我們需要連接MongoDB客戶端,然後連接數據庫blog_database,如果該數據庫不存在,就會創建一個數據庫。接下來選擇該數據庫的集合blog,該集合不存在時也會創建一個。上述代碼運行成功代表沒有問題。
接下來,我們爬取博客主頁的所有文章標題並存儲至MongoDB數據庫:

import requests
import datetime
from bs4 import BeautifulSoup
from pymongo import MongoClient

client = MongoClient('localhost',27017)
db = client.blog_database
collection = db.blog

link = "http://www.santostang.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) \
           AppleWebKit/537.36 (KHTML, like Gecko) \
           Chrome/70.0.3538.25 \
           Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400 ',
          'Host': 'www.santostang.com'
          }
r = requests.get(link, headers=headers)

soup = BeautifulSoup(r.text, "lxml")
title_list = soup.find_all("h1", class_="post-title")
for eachone in title_list:
    url = eachone.a['href']
    title = eachone.a.text.strip()
    post = {"url": url, "title": title, "date":datetime.datetime.utcnow()}
    collection.insert_one(post)

我們使用insert_one()函數將字典加入集合collection中。
然後,我們進入bin文件夾,打開Mongo.exe程序,輸入:

use blog_database
db.blog.find.pretty()

這樣就能查詢數據集合的數據了,如下圖:
在這裏插入圖片描述
如果還想深入學習python操作MongoDB數據庫,可以到PyMongo官方網站學習,地址爲:
https://api.mongodb.com/python/current/index.html

(4)RoboMongo的安裝和使用

RoboMongo是MongoDB的圖形化管理工具,只要會使用mongo shell,就可以用RoboMongo。
如果你想可視化地管理MongoDB的數據,可以試一試使用RoboMongo。下面介紹怎麼安裝:
首先,進入https://robomongo.org/download下載RoboMongo:

在這裏插入圖片描述
下載完成後,我們會得到兩個文件:
在這裏插入圖片描述
這裏我們打開robo3t-1.3.1-windows-x86_64-7419c406.exe文件,根據提示安裝。
然後在打開的界面選擇Create,默認選項單擊save:

在這裏插入圖片描述
之後,對於新創建的這個連接,單擊Connect:
在這裏插入圖片描述
最後我們就可以看到數據庫的所有信息了:
在這裏插入圖片描述
返回



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章