【Python3網絡爬蟲開發實戰】5-數據存儲-1 文件存儲-1 TXT文本存儲

用解析器解析出數據以後,接下來就是存儲數據了。保存的形式能夠多種多樣,最簡單的形式是直接保存爲文本文件,如TXT、JSON、CSV等。另外,還能夠保存到數據庫中,如關係型數據庫MySQL,非關係型數據庫MongoDB、Redis等。

5.1-文件存儲

文件存儲形式多種多樣,好比能夠保存成TXT純文本形式,也能夠保存爲JSON格式、CSV格式等,本節就來了解一下文本文件的存儲方式。
html

將數據保存到TXT文本的操做很是簡單,並且TXT文本幾乎兼容任何平臺,可是這有個缺點,那就是不利於檢索。因此若是對檢索和數據結構要求不高,追求方便第一的話,能夠採用TXT文本存儲。本節中,咱們就來看下如何利用Python保存TXT文本文件。數據庫

1. 本節目標

本節中,咱們要保存知乎上「發現」頁面的「熱門話題」部分,將其問題和答案統一保存成文本形式。bash

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 文件內容ui

這樣熱門問答的內容就被保存成文本形式了。編碼

這裏open()方法的第一個參數即要保存的目標文件名稱,第二個參數爲a,表明以追加方式寫入到文本。另外,咱們還指定了文件的編碼爲utf-8。最後,寫入完成後,還須要調用close()方法來關閉文件對象。url

3. 打開方式

在剛纔的實例中,open()方法的第二個參數設置成了a,這樣在每次寫入文本時不會清空源文件,而是在文件末尾寫入新的內容,這是一種文件打開方式。關於文件的打開方式,其實還有其餘幾種,這裏簡要介紹一下。spa

  • 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')
複製代碼

上面即是利用Python將結果保存爲TXT文件的方法,這種方法簡單易用,操做高效,是一種最基本的保存數據的方法。


本資源首發於崔慶才的我的博客靜覓: Python3網絡爬蟲開發實戰教程 | 靜覓

如想了解更多爬蟲資訊,請關注個人我的微信公衆號:進擊的Coder

weixin.qq.com/r/5zsjOyvEZ… (二維碼自動識別)

相關文章
相關標籤/搜索