【问题标题】:Logging HTML content in a library environment with Python使用 Python 在库环境中记录 HTML 内容
【发布时间】:2014-10-31 21:38:35
【问题描述】:

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

但是,我在想出一种可接受的方式来处理存储可能格式不正确的HTML 时遇到了问题。由于我在测试时只能考虑这么多事情,因此将来解析可能会失败,如果我能找到一种方法来存储解析失败的HTML 以供将来修复错误,那将很有帮助。

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

我已确定如何在内部传递HTML。我的计划是通过异常的参数传递它,然后用过滤器捕获它。但是,如何处理它真的很困扰我。

感谢任何有关实现此目的的方法的反馈。

【问题讨论】:

    标签: python html logging


    【解决方案1】:

    基于您无法控制的网站的服务可能有些脆弱,因此存储 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 文件有什么区别呢?向我的库添加另一个依赖项也不太理想。
    • 我同意这对您可能没有意义。这就是为什么我可能会在类似情况下这样做:假设我收集了很多数据并且需要快速重新解析(即在集群上)。 gzip 解决方案要么会创建大量文件(这可能是有问题的),要么会创建非常大的 gzip 文件,如果不先解压缩整个文件,就无法在“块”中进行处理。 “在 Mongo 中以防万一”的方法让您可以轻松地在集群上进行重新处理(例如,可能使用 mongo-hadoop),而对 Python 代码的更改最少。
    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 2016-04-08
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多