網絡爬蟲之第三章數據存儲

第三章 數據存儲

第一節 json文件處理:

什麼是json:

JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基於 ECMAScript (w3c制定的js規範)的一個子集,採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。更多解釋請見:https://baike.baidu.com/item/JSON/2462549?fr=aladdinhtml

JSON支持數據格式:

  1. 對象(字典)。使用花括號。
  2. 數組(列表)。使用方括號。
  3. 整形、浮點型、布爾類型還有null類型。
  4. 字符串類型(字符串必需要用雙引號,不能用單引號)。

多個數據之間使用逗號分開。
注意:json本質上就是一個字符串。python

字典和列表轉JSON:

import json

books = [
    {
        'title': '鋼鐵是怎樣練成的',
        'price': 9.8
    },
    {
        'title': '紅樓夢',
        'price': 9.9
    }
]

json_str = json.dumps(books,ensure_ascii=False)
print(json_str)

 

由於jsondump的時候,只能存放ascii的字符,所以會將中文進行轉義,這時候咱們可使用ensure_ascii=False關閉這個特性。
Python中。只有基本數據類型才能轉換成JSON格式的字符串。也即:intfloatstrlistdicttuplemysql

將json數據直接dump到文件中:

json模塊中除了dumps函數,還有一個dump函數,這個函數能夠傳入一個文件指針,直接將字符串dump到文件中。示例代碼以下:sql

books = [
    {
        'title': '鋼鐵是怎樣練成的',
        'price': 9.8
    },
    {
        'title': '紅樓夢',
        'price': 9.9
    }
]
with open('a.json','w') as fp:
    json.dump(books,fp)

 

將一個json字符串load成Python對象:

json_str = '[{"title": "鋼鐵是怎樣練成的", "price": 9.8}, {"title": "紅樓夢", "price": 9.9}]'
books = json.loads(json_str,encoding='utf-8')
print(type(books))
print(books)

 

直接從文件中讀取json:

import json
with open('a.json','r',encoding='utf-8') as fp:
    json_str = json.load(fp)
    print(json_str)

 



第二節 csv文件處理

讀取csv文件:

import csv

with open('stock.csv','r') as fp:
    reader = csv.reader(fp)
    titles = next(reader)
    for x in reader:
        print(x)

 

這樣操做,之後獲取數據的時候,就要經過下表來獲取數據。若是想要在獲取數據的時候經過標題來獲取。那麼可使用DictReader。示例代碼以下:mongodb

import csv

with open('stock.csv','r') as fp:
    reader = csv.DictReader(fp)
    for x in reader:
        print(x['turnoverVol'])

 

寫入數據到csv文件:

寫入數據到csv文件,須要建立一個writer對象,主要用到兩個方法。一個是writerow,這個是寫入一行。一個是writerows,這個是寫入多行。示例代碼以下:數據庫

import csv

headers = ['name','age','classroom']
values = [
    ('zhiliao',18,'111'),
    ('wena',20,'222'),
    ('bbc',21,'111')
]
with open('test.csv','w',newline='') as fp:
    writer = csv.writer(fp)
    writer.writerow(headers)
    writer.writerows(values)

 

也可使用字典的方式把數據寫入進去。這時候就須要使用DictWriter了。示例代碼以下:編程

import csv

headers = ['name','age','classroom']
values = [
    {"name":'wenn',"age":20,"classroom":'222'},
    {"name":'abc',"age":30,"classroom":'333'}
]
with open('test.csv','w',newline='') as fp:
    writer = csv.DictWriter(fp,headers)
    writer = csv.writeheader()
    writer.writerow({'name':'zhiliao',"age":18,"classroom":'111'})
    writer.writerows(values)
 
    

 

第三節 MySQL數據庫操做

安裝mysql:

  1. 在官網:https://dev.mysql.com/downloads/windows/installer/5.7.html
  2. 若是提示沒有.NET Framework框架。那麼就在提示框中找到下載連接,下載一個就能夠了。
  3. 若是提示沒有Microsoft Virtual C++ x64(x86),那麼百度或者谷歌這個軟件安裝便可。
  4. 若是沒有找到。那麼私聊我。

navicat是一個操做mysql數據庫很是方便的軟件。使用他操做數據庫,就跟使用excel操做數據是同樣的。json

安裝驅動程序:

Python要想操做MySQL。必需要有一箇中間件,或者叫作驅動程序。驅動程序有不少。好比有mysqldbmysqlclientpymysql等。在這裏,咱們選擇用pymysql。安裝方式也是很是簡單,經過命令pip install pymysql便可安裝。windows

數據庫鏈接:

數據庫鏈接以前。首先先確認如下工做完成,這裏咱們以一個pymysql_test數據庫.如下將介紹鏈接mysql的示例代碼:數組

 import pymysql

    db = pymysql.connect(
        host="127.0.0.1",
        user='root',
        password='root',
        database='pymysql_test',
        port=3306
    )
    cursor = db.cursor()
    cursor.execute("select 1")
    data = cursor.fetchone()
    print(data)
    db.close()

 

插入數據:

import pymysql

db = pymysql.connect(
    host="127.0.0.1",
    user='root',
    password='root',
    database='pymysql_test',
    port=3306
)
cursor = db.cursor()
sql = """
insert into user(
    id,username,gender,age,password
  ) 
  values(null,'abc',1,18,'111111');
"""
cursor.execute(sql)
db.commit()
db.close()

 

若是在數據還不能保證的狀況下,可使用如下方式來插入數據:

 
      
import pymysql

db = pymysql.connect(
    host="127.0.0.1",
    user='root',
    password='root',
    database='pymysql_test',
    port=3306
)
cursor = db.cursor()
db.commit() 
db.close()
sql = """ insert into user( id,username,gender,age,password ) values(null,%s,%s,%s,%s); """ cursor.execute(sql,('spider',1,20,'222222'))

 

查找數據:

使用pymysql查詢數據。可使用fetch*方法

  1. fetchone():這個方法每次之獲取一條數據。
  2. fetchall():這個方法接收所有的返回結果。
  3. fetchmany(size):能夠獲取指定條數的數據。
    示例代碼以下:
cursor = db.cursor()

sql = """
select * from user
"""

cursor.execute(sql)
while True:
    result = cursor.fetchone()
    if not result:
        break
    print(result)
db.close()

 

或者是直接使用fetchall,一次性能夠把全部知足條件的數據都取出來:

cursor = db.cursor()

sql = """
select * from user
"""

cursor.execute(sql)
results = cursor.fetchall()
for result in results:
    print(result)
db.close()

 

或者是使用fetchmany,指定獲取多少條數據:

cursor = db.cursor()

sql = """
select * from user
"""

cursor.execute(sql)
results = cursor.fetchmany(1)
for result in results:
    print(result)
db.close()

 

刪除數據:

cursor = db.cursor()

sql = """
delete from user where id=1
"""

cursor.execute(sql)
db.commit()
db.close()

 

更新數據:

conn = pymysql.connect(host='localhost',user='root',password='root',database='pymysql_demo',port=3306)
cursor = conn.cursor()

sql = """
update user set username='aaa' where id=1
"""
cursor.execute(sql)
conn.commit()

conn.close()

 

 第四節 MongoDB

 

安裝:

官網:https://www.mongodb.com/download-center#community

安裝驅動程序:

Python要想操做MySQL。必需要有一箇中間件,或者叫作驅動程序。好比:pymongo   安裝方式也是很是簡單,經過命令pip install pymongo便可安裝。

插入數據:

 

from pymongo import MongoClient

# Mongo配置
conn = MongoClient('127.0.0.1', 27017)
db = conn.xxx  #鏈接xxx數據庫,沒有則自動建立
mongo_xxx = db.article  #使用article集合,沒有則自動建立

mongo_xxx.insert({
                    'title': title,
                    'title': title,
                      .        .    
                      .        .
                })                                

 

 

 

基本操做命令:

1.ds :查看當前的數據庫。

2.show dbs :查看全部的數據庫

3.use 數據庫名 : 切換數據庫。若是數據庫不存在,則建立一個數據庫。

4.db.dropDatabase() :刪除當前指向的數據庫。

5.db.集合名.insert(value) :  添加數據到指定的集合中。

6.db.集合名.find():從指定的集合中查找數據。

相關文章
相關標籤/搜索