綜述
本系列文檔用於對Python爬蟲技術的學習進行簡單的教程講解,鞏固自己技術知識的同時,萬一一不小心又正好對你有用那就更好了。
Python 版本是3.7.4
前面兩篇記述瞭如何使用json、csv進行數據存儲,本篇記述和使用txt存儲數據。
txt 介紹
將數據保存到txt文本的操作非常簡單,而且txt文本幾乎兼容任何平臺,但是這有個缺點,那就是不利於檢索。所以如果對檢索和數據結構要求不高,追求方便第一的話,可以採用txt文本存儲。本節中,我們就來看下如何利用Python保存txt文本文件。
示例代碼
# 引入所需庫
import requests
from pyquery import PyQuery as pq
# 開源中國博客
url = 'https://www.oschina.net/blog'
# 定義請求頭
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'
}
# 進行請求
req = requests.get(url, headers=headers)
html = req.text
# 解析並獲取數據
doc = pq(html)
items = doc('div.blog-list-container div.blog-item').items()
for item in items:
# 博客標題
title = item.find('div.content a').text()
# 博客簡介
content = item.find('div.description p').text()
# 寫入文件
file = open('blog.txt', 'a', encoding='utf-8')
file.write('\n'.join([title, content]))
file.write('\n' + '=' * 50 + '\n')
file.close()
此示例代碼演示抓取開源中國博客頁內容,並將博客標題和博客簡介寫入txt文件中。這裏主要是爲了演示文件保存的方式,因此對requests異常不再做處理。
首先,用requests提取開源中國的博客頁面,然後將博客的標題,簡介提取出來,然後利用Python提供的open()方法打開一個文本文件,獲取一個文件操作對象,這裏賦值爲file,接着利用file對象的write()方法將提取的內容寫入文件,最後調用close()方法將其關閉,這樣抓取的內容即可成功寫入文本中了。
這裏open()方法的第一個參數即要保存的目標文件名稱,第二個參數爲a
,代表以追加方式寫入到文本。另外,我們還指定了文件的編碼爲utf-8。最後,寫入完成後,還需要調用close()方法來關閉文件對象。
文件打開方式
在上面的代碼實例中,open()方法的第二個參數設置成了a
,這樣在每次寫入文本時不會清空源文件,而是在文件末尾寫入新的內容,這是一種文件打開方式。關於文件的打開方式,其實還有其他幾種,這裏簡要介紹一下:
a
: 以追加方式打開一個文件。如果該文件已存在,文件指針將會放在文件結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,則創建新文件來寫入。ab
: 以二進制追加方式打開一個文件。如果該文件已存在,則文件指針將會放在文件結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,則創建新文件來寫入。a+
: 以讀寫方式打開一個文件。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,則創建新文件來讀寫。ab+
: 以二進制追加方式打開一個文件。如果該文件已存在,則文件指針將會放在文件結尾。如果該文件不存在,則創建新文件用於讀寫。r
: 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。rb
: 以二進制只讀方式打開一個文件。文件指針將會放在文件的開頭。r+
: 以讀寫方式打開一個文件。文件指針將會放在文件的開頭。rb+
: 以二進制讀寫方式打開一個文件。文件指針將會放在文件的開頭。w
: 以寫入方式打開一個文件。如果該文件已存在,則將其覆蓋。如果該文件不存在,則創建新文件。wb
: 以二進制寫入方式打開一個文件。如果該文件已存在,則將其覆蓋。如果該文件不存在,則創建新文件。w+
: 以讀寫方式打開一個文件。如果該文件已存在,則將其覆蓋。如果該文件不存在,則創建新文件。wb+
以二進制讀寫格式打開一個文件。如果該文件已存在,則將其覆蓋。如果該文件不存在,則創建新文件。
with ** as **
文件還有另外一種寫法,那就是with ** as **
語法,在with
控制塊結束時,文件會自動關閉,所以就不再需要掉用close()
方法進行關閉文件,示例代碼如下:
# 引入所需庫
import requests
from pyquery import PyQuery as pq
# 開源中國博客
url = 'https://www.oschina.net/blog'
# 定義請求頭
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'
}
# 進行請求
req = requests.get(url, headers=headers)
html = req.text
# 解析並獲取數據
doc = pq(html)
items = doc('div.blog-list-container div.blog-item').items()
for item in items:
# 博客標題
title = item.find('div.content a').text()
# 博客簡介
content = item.find('div.description p').text()
# 寫入文件
with open('blog.txt', 'a', encoding='utf-8') as file:
file.write('\n'.join([title, content]))
file.write('\n' + '=' * 50 + '\n')