基於您不控制的網站的服務可能會有些脆弱,因此存儲HTML以避免在解析問題時重新抓取對我來說非常有意義。由於未壓縮的HTML會消耗磁盤上的大量空間,因此可能需要將其以壓縮格式存儲在數據庫中。
我發現MongoDB對此很方便。底層存儲格式是BSON(即二進制JSON)。這也很容易安裝和使用。
下面是使用PyMongo存儲該頁面在MongoDB中的玩具例子:
from pymongo import MongoClient
import urllib2
import time
# what will be stored in the document
ts = time.time()
url = 'http://stackoverflow.com/questions/26683772/logging-html-content-in-a-library-environment-with-python'
html = urllib2.urlopen(url).read()
# create a dict and store it in MongoDB
htmlDict = {'url':url, 'ts':ts, 'html':html}
client = MongoClient()
db = client.html_log
collection = db.html
collection.insert(htmlDict)
檢查看到,文檔存儲在MongoDB中:
$ mongo
> use html_log;
> db.html.find()
{ "_id" : ObjectId("54544d96164a1b22d3afd887"), "url" : "http://stackoverflow.com/questions/26683772/logging-html-content-in-a-library-environment-with-python", "html" : "<!DOCTYPE html> [...] </html>", "ts" : 1414810778.001168 }
謝謝,但這是什麼之間的差異只是壓縮一個HTML文件?將另一個依賴項添加到我的庫中也不太理想。 – 2014-11-01 04:43:19
我同意這可能對你沒有意義。這就是爲什麼我可能會在類似的情況下做到這一點:假設我收集了大量數據並需要快速重新解析(即在羣集上)。 gzip解決方案可能會創建大量文件(可能有問題),或者非常大的gzip文件無法在「塊」中處理,而無需首先解壓整個文件。 '用Mongo即時保管'的方法讓你可以輕鬆地在集羣上重新處理(例如使用mongo-hadoop),並且對Python代碼進行最少量的更改。 – 2014-11-01 16:01:46