Python爬蟲3.3 — txt用法教程

綜述

本系列文檔用於對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')

其他博文鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章