第五章 數據存儲
第五章 數據存儲
我們用解析器解析出數據之後,接下來的一步就是對數據進行存儲了,保存的形式可以多種多樣,最簡單的形式可以直接保存為文本文件,如 TXT、Json、CSV 等等,另外還可以保存到數據庫中,如關系型數據庫 MySQL,非關系型數據庫 MongoDB、Redis 等等。那麽本章我們就來統一了解一下數據的保存方式。
5.1 文件存儲
文件存儲形式可以是多種多樣的,比如可以保存成 TXT 純文本形式,也可以保存為 Json 格式、CSV 格式等,本節我們來了解下文本文件的存儲方式。
5.1.1 TXT文本存儲
將數據保存到 TXT 文本的操作非常簡單,而且 TXT 文本幾乎兼容任何平臺,但是有個缺點就是不利於檢索
1. 本節目標
本節我們要保存知乎發現頁面的熱門問題部分,將其問題和答案統一保存成文本形式。
2. 基本實例
首先可以用 Requests 將網頁源代碼獲取下來,然後使用 PyQuery 解析庫進行解析,接下來將提取的標題、回答者、回答保存到文本,代碼如下:
import requests
from pyquery import PyQuery as pq
url = ‘https://www.zhihu.com/explore‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36‘
}
html = requests.get(url, headers=headers).text
doc = pq(html)
items = doc(‘.explore-tab .feed-item‘).items()
for item in items:
question = item.find(‘h2‘).text()
author = item.find(‘.author-link-line‘).text()
answer = pq(item.find(‘.content‘).html()).text()
file = open(‘explore.txt‘, ‘a‘, encoding=‘utf-8‘)
file.write(‘\n‘.join([question, author, answer]))
file.write(‘\n‘ + ‘=‘ * 50 + ‘\n‘)
file.close()
在這裏主要是為了演示文件保存的方式,因此 Requests 異常處理部分在此省去,我們首先用 Requests 提取了知乎發現頁面,然後將熱門問題的問題、回答者、答案全文提取出來,然後利用了Python提供的 open() 方法打開一個文本文件,獲取一個文件操作對象,這裏賦值為 file,然後利用 file 對象的 write() 方法將提取的內容寫入文件,最後記得調用一下 close() 方法將其關閉,這樣抓取的內容即可成功寫入到文本中了。
運行程序,可以發現在本地生成了一個 explore.txt 文件,其內容如圖 5-1 所示:
圖 5-1 文件內容
這樣熱門問答的內容就被保存文文本形式了。
在這裏 open() 方法的第一個參數即為要保存的目標文件名稱,第二個參數為 a,代表以追加方式寫入到文本,另外我們還指定了文件的編碼為utf-8,最後寫入完成之後,我們還需要調用 close() 方法來關閉文件對象。
3. 打開方式
在剛才的實例中,第二個參數我們設置成了 a,這樣在每次寫入文本時不會清空源文件,而是在文件末尾寫入新的內容,這是一種文件打開方式。關於文件打開方式,其實還有另外的幾種,在此列舉如下:
- r,以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
- rb,以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。
- r+,打開一個文件用於讀寫。文件指針將會放在文件的開頭。
- rb+,以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。
- w,打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
- wb ,以二進制格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
- w+, 打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
- wb+,以二進制格式打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
- a,打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。 ab 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
- a+,打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
- ab+,以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。
4. 簡化寫法
另外文件寫入還有一種簡寫方法,那就是使用 with as 語法,在 with 控制塊結束時,文件會自動關閉,所以就不需要再調用 close() 方法了。
所以上面的保存方式我們可以簡寫如下:
with open(‘explore.txt‘, ‘a‘, encoding=‘utf-8‘) as file:
file.write(‘\n‘.join([question, author, answer]))
file.write(‘\n‘ + ‘=‘ * 50 + ‘\n‘)
如果想保存時將原文清空,那麽可以將第二個參數改寫為 w,代碼如下:
with open(‘explore.txt‘, ‘w‘, encoding=‘utf-8‘) as file:
file.write(‘\n‘.join([question, author, answer]))
file.write(‘\n‘ + ‘=‘ * 50 + ‘\n‘)
5. 結語
以上便是利用 Python 將結果保存為 TXT 文件的方法,此種方法簡單易用,操作高效,是一種最基本的保存數據的方法。
第五章 數據存儲