提取到數(shù)據(jù)后, 接下來就是存儲數(shù)據(jù)了, 數(shù)據(jù)的存儲形式多種多樣, 其中最簡單的一種就是將數(shù)據(jù)直接保存為文本文件, 例如:txt,? json, csv 等, 還可以將數(shù)據(jù)保存到數(shù)據(jù)庫中, 如關系型數(shù)據(jù)庫 MySQL, 非關系型數(shù)據(jù)庫 MongoDB, Redis等, 除了這兩種, 也可以直接把數(shù)據(jù)存儲到一些搜索引擎,例如 Elasticsearch 中, 以便檢索和查看
txt 文本文件存儲:
將數(shù)據(jù)保存為 txt 文本的操作非常簡單, 而且txt 文本幾乎兼容任何平臺, 但是這也有個缺點, 就是不利于檢索, 所以如果對檢索和數(shù)據(jù)結(jié)構的要求不高,追求方便第一的話,就可以采用txt 文本存儲
import requests
from pyquery import PyQuery as pq
import re
url = 'https://static1.scrape.center/'
html = requests.get(url).text
doc = pq(html)
items = doc('.el-card').items()
file = open('movies.txt', 'w', encoding='utf-8')
for item in items:
# 名稱
name = item.find('a > h2').text()
file.write(f'名稱: {name}\n')
# 類別
categories = [item.text() for item in item.find('.categories button span').items()]
file.write(f'類別: {categories}\n')
# 上映時間
published_at = item.find('.info:contains(上映)').text()
published_at = re.search('(\d{4}-\d{2}-\d{2})', published_at).group(1) \
if published_at and re.search('\d{4}-\d{2}-\d{2}', published_at) else None
file.write(f'上映時間: {published_at}\n')
# 評分
score = item.find('p.score').text()
file.write(f'評分: {score}\n')
file.write(f'{"=" * 50}\n')
file.close()
這里的目的主要是演示文件的存儲方式,因此省去了requests 異常處理部分, 首先,用requests庫提取網(wǎng)站首頁的HTML代碼, 然后利用 pyquery解析庫將電影的名稱,類別,上映時間,評分信息提取出來。
我們可以利用python提供的open方法, 打開一個文本文件,獲取一個文件操作對象, 這里賦值為file,? 每提取一部分信息, 就利用file 對象的write方法 將這部分信息寫入文件,全部提取完畢后, 調(diào)用close 方法將 file 對象關閉, 運行程序后,我們會發(fā)現(xiàn)生成了一個 movies.txt 的文件
文本內(nèi)容的存儲最重要的就是 open, write, close 這三個方法 的用法
打開方式:
在上面的實例中,open方法的第二個參數(shù)設置成了w,? 這樣在每次寫入文本時都會清空源文件, 然后將新的內(nèi)容寫入文件, w 只是文件打開方式的一種, 下面簡要介紹一下其它幾種:
r: 以只讀的方式打開一個文件, 意思是只能讀取文件內(nèi)容, 不能吸入, 這也是默認模式
rb:以二進制只讀方式打開一個文件, 通常用于打開二進制文件,例如音頻,圖片,視頻等
r+:以讀寫的方式打開一個文件,既可以讀文件,也可以寫文件,
rb+: 以讀寫的方式打開一個二進制文件,既可以讀,也可以寫文件,只是讀寫的方式都是二進制
w:以寫入方式打開一個文件, 如果該文件已存在,則將其覆蓋, 如果該文件不存在, 則創(chuàng)建
wb:以二進制寫入方式打開一個文件, 如果該文件已存在,則覆蓋, 如果該文件不存在,則創(chuàng)建
w+:以讀寫方式打開一個文件,如果該文件已存在,則覆蓋,如果該文件不存在,則創(chuàng)建
wb+:以二進制讀寫格式打開一個文件, 如果該文件已存在,則覆蓋,不存在, 則創(chuàng)建
a:以追加方式打開一個文件,如果該文件已存在,則文件指針將會放在文件結(jié)尾, 也就是說, 新的內(nèi)容將會被寫到已有內(nèi)容之后, 如果該文件不存在,則創(chuàng)建新文件來寫入
ab:以二進制追加方式打開一個文件,如果該文件已存在,則文件指針將會放在文件結(jié)尾,也就是說,新的內(nèi)容會被寫到已有內(nèi)容之后, 如果該文件不存在,則創(chuàng)建新文件來寫入
a+:以讀寫方式打開一個文件,如果該文件已存在,則文件指針將會放在文件結(jié)尾, 文件打開時會是追加模式,如果該文件不存在, 則創(chuàng)建新文件用于讀寫
ab+:以二進制追加方式打開一個文件, 如果該文件已存在,則文件指針將會放在文件結(jié)尾,如果該文件不存在,則創(chuàng)建新文件用于讀寫文章來源:http://www.zghlxwxcb.cn/news/detail-774608.html
簡化寫法:
使用 with as 語法, 當with可控制塊結(jié)束時, 文件會自動關閉,這樣就不用調(diào)用close 方法了文章來源地址http://www.zghlxwxcb.cn/news/detail-774608.html
with open('movies.txt', 'w', encoding='utf-8'):
file.write(f'名稱: {name}\n')
file.write(f'類別: {categories}\n')
file.write(f'上映時間: {published_at}\n')
file.write(f'評分: {score}\n')
到了這里,關于Python 網(wǎng)絡爬蟲 數(shù)據(jù)的存儲(一):TXT 文本文件存儲:的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!