使用Python在库环境中记录HTML内容

时间:2014-10-31 21:38:35

标签: python html logging

我有一个第三方开发者用来从一些特定网站获取信息的库。该库负责连接到网站,抓取页面,解析必要的信息,并将其返回给开发人员。

但是,我遇到了一些问题,可以采用可接受的方式来处理存储可能格式错误的HTML。因为在测试时我只能考虑很多东西,所以解析可能在将来失败,如果我能找到一种方法来存储解析失败以便将来修复bug的HTML,那将会很有帮助。

现在我正在使用Python的内部日志记录模块来处理我的库中的日志记录。我允许第三方开发人员提供配置字典来配置日志记录输出错误数据的方式。但是,将HTML打印到控制台甚至打印到文件对我来说并不理想,因为我认为它会使终端或错误日志混乱。我考虑将HTML个文件存储在本地硬盘上,但这似乎非常具有侵入性。

我已经确定了如何在内部传递HTML。我的计划是通过异常参数传递它,然后用过滤器捕获它。然而,如何处理它真的让我感到不安。

对于实现此目标的方法的任何反馈表示赞赏。

1 个答案:

答案 0 :(得分:0)

基于您无法控制的网站的服务可能有点脆弱,因此存储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 }