1. 程式人生 > >【Python3 爬蟲學習筆記】資料儲存 1 -- TXT文字儲存

【Python3 爬蟲學習筆記】資料儲存 1 -- TXT文字儲存

資料儲存的形式可以多種多樣,最簡單的形式是直接儲存為文字檔案,如TXT、JSON、CSV等。另外,還可以儲存到資料庫中,如關係型資料庫MySQL,非關係型資料庫MongoDB、Redis等。

檔案儲存

文字儲存形式多種多樣,比如可以儲存成TXT純文字形式,也可以儲存為JSON格式、CSV格式等。

TXT文字儲存

將資料儲存到TXT文字的操作非常簡單,而且TXT文字幾乎相容任何平臺,但是有個缺點,那就是不利於檢索。所以如果對檢索和資料結構要求不高,追求方法第一的話,可以採用TXT文字儲存。

基本例項

儲存知乎上“發現”頁面的“熱門話題”部分,將其問題和答案統一儲存成文字形式。
首先,可以用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('.exploer-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提取只會的“發現”頁面,然後將熱門話題的問題、回答者、答案全文提取出來,然後利用Python提供的open()方法開啟一個文字檔案,獲取一個檔案操作物件,這裡賦值為file,接著利用file物件的write()方法將提取的內容寫入檔案,最後呼叫close()方法將其關閉,這樣抓取的內容即可成功寫入文字中了。
執行程式,可以發現在本地生成了一個explore.txt檔案,內容如圖所示:
在這裡插入圖片描述
這裡open()方法的第一個引數即要儲存的目標檔名稱,第二個引數為a,代表以追加方式寫入到文字。另外,我們還指定了檔案的編碼為utf-8。最後,寫入完成後,還需要呼叫close()方法來關閉物件。

開啟方式

在剛才的例項中,open()方法的第二個引數設定成了a,這樣在每次寫入文字時不會清空原始檔,而是在檔案末尾寫入新的內容,這是一種檔案開啟方式。關於檔案的開啟方式,其實還有其他幾種。

  • r:以只讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
  • rb:以二進位制只讀方式開啟一個檔案。檔案指標將會放在檔案的開頭。
  • r+:以讀寫方式開啟一個檔案。檔案指標將會放在檔案的開頭。
  • rb+:以二進位制讀寫方式開啟一個檔案。檔案指標將會放在檔案的開頭。
  • w:以寫入方式開啟一個檔案。如果該檔案已存在,則將其覆蓋。如果該檔案不存在,則建立新檔案。
  • wb:以二進位制寫入方式開啟一個檔案。如果該檔案已存在,則將其覆蓋。如果該檔案不存在,則建立新檔案。
  • w+:以讀寫方式開啟一個檔案。如果該檔案已存在,則將其覆蓋。如果該檔案不存在,則建立新檔案。
  • wb+:以二進位制讀寫格式開啟一個檔案。如果該檔案已存在,則將其覆蓋。如果該檔案不存在,則建立新檔案。
  • a:以追加方式開啟一個檔案。如果該檔案已存在,檔案指標將會放在檔案結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,則建立新檔案來寫入。
  • ab:以二進位制追加方式開啟一個檔案。如果該檔案已存在,則檔案指標將會放在檔案結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,則建立新檔案寫入。
  • a+:以讀寫方式開啟一個檔案。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,則建立新檔案來讀寫。
  • ab+:以二進位制追加方式開啟一個檔案。如果該檔案已存在,則檔案指標將會放在檔案結尾。如果該檔案不存在,則建立新檔案用於讀寫。

簡化寫法

另外,檔案寫入還有一種簡寫方式,那就是使用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')