【Python3網路爬蟲開發實戰】5.1.1-TXT文本存儲
將數據保存到TXT文本的操作非常簡單,而且TXT文本幾乎兼容任何平台,但是這有個缺點,那就是不利於檢索。所以如果對檢索和數據結構要求不高,追求方便第一的話,可以採用TXT文本存儲。本節中,我們就來看下如何利用Python保存TXT文本文件。
1. 本節目標
本節中,我們要保存知乎上「發現」頁面的「熱門話題」部分,將其問題和答案統一保存成文本形式。
2. 基本實例
首先,可以用requests將網頁源代碼獲取下來,然後使用pyquery解析庫解析,接下來將提取的標題、回答者、回答保存到文本,代碼如下:
import requestsfrom pyquery import PyQuery as pqurl = https://www.zhihu.com/exploreheaders = { 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).textdoc = 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(
.join([question, author, answer])) file.write(
+ = * 50 +
) file.close()
這裡主要是為了演示文件保存的方式,因此requests異常處理部分在此省去。首先,用requests提取知乎的「發現」頁面,然後將熱門話題的問題、回答者、答案全文提取出來,然後利用Python提供的open()
方法打開一個文本文件,獲取一個文件操作對象,這裡賦值為file
,接著利用file
對象的write()
方法將提取的內容寫入文件,最後調用close()
方法將其關閉,這樣抓取的內容即可成功寫入文本中了。
運行程序,可以發現在本地生成了一個explore.txt文件,其內容如圖5-1所示。
圖5-1 文件內容
這樣熱門問答的內容就被保存成文本形式了。
這裡open()
方法的第一個參數即要保存的目標文件名稱,第二個參數為a
,代表以追加方式寫入到文本。另外,我們還指定了文件的編碼為utf-8
。最後,寫入完成後,還需要調用close()
方法來關閉文件對象。
3. 打開方式
在剛才的實例中,open()
方法的第二個參數設置成了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(
.join([question, author, answer])) file.write(
+ = * 50 +
)
如果想保存時將原文清空,那麼可以將第二個參數改寫為w
,代碼如下:
with open(explore.txt, w, encoding=utf-8) as file: file.write(
.join([question, author, answer])) file.write(
+ = * 50 +
)
上面便是利用Python將結果保存為TXT文件的方法,這種方法簡單易用,操作高效,是一種最基本的保存數據的方法。
本資源首發於崔慶才的個人博客靜覓: Python3網路爬蟲開發實戰教程 | 靜覓
如想了解更多爬蟲資訊,請關注我的個人微信公眾號:進擊的Coder
http://weixin.qq.com/r/5zsjOyvEZXYarW9Y9271 (二維碼自動識別)
推薦閱讀: