2017-05-29 98 views
-3

这是从服务器的获取请求中提供的代码。正如我可以看到它使用gzip编码,现在我需要一个干净的html代码。如何使用python解码html代码

例子:

{"Html":"\u003cdiv class=\"panel-body\"\u003e\r\n  \u003cdiv class=\"printContainer\"\u003e\r\n   \u003ca href=\"#\" data-itemid=\"237994\" data-toggle=\"tooltip\" data-placement=\"top\" data-action=\"printProductInfo\" accesskey=\"p\" rel=\"nofollow\"\u003e\r\n    \u003cspan class=\"nonIcon printIcon\"\u003e\u003c/span\u003e\u0026nbsp;Skriv ut\r\n   \u003c/a\u003e\r\n  \u003c/div\u003e\r\n \u003ctable class=\"table table-striped\"\u003e\r\n      \u003ctr class=\"info\"\u003e\r\n     \u003cth colspan=\"2\" class=\"plCategoryHeader\" style=\"margin-top: 0\"\u003e\r\n      Allm\u0026#228;nt\r\n     \u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n     \u003ctd class=\"plHeader\"\u003e\r\n      Tillv. art. nr.\r\n     \u003c/td\u003e\r\n     \u003ctd class=\"plValue\"\u003e\r\n      T3M78AA#ABB\r\n     \u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n     \u003ctd class=\"plHeader\"\u003e\r\n 
+0

是否从获取请求选项卡提供的代码分隔? –

+0

是的,{} –

+1

它与gzip有什么关系?它看起来像JSON对象 – varela

回答

-2
response = '{"Html":"\u003cdiv class=\"panel-body\"\u003e\r\n  \u003cdiv class=\"printContainer\"\u003e\r\n   \u003ca href=\"#\" data-itemid=\"237994\" data-toggle=\"tooltip\" data-placement=\"top\" data-action=\"printProductInfo\" accesskey=\"p\" rel=\"nofollow\"\u003e\r\n    \u003cspan class=\"nonIcon printIcon\"\u003e\u003c/span\u003e\u0026nbsp;Skriv ut\r\n   \u003c/a\u003e\r\n  \u003c/div\u003e\r\n \u003ctable class=\"table table-striped\"\u003e\r\n      \u003ctr class=\"info\"\u003e\r\n     \u003cth colspan=\"2\" class=\"plCategoryHeader\" style=\"margin-top: 0\"\u003e\r\n      Allm\u0026#228;nt\r\n     \u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n     \u003ctd class=\"plHeader\"\u003e\r\n      Tillv. art. nr.\r\n     \u003c/td\u003e\r\n     \u003ctd class=\"plValue\"\u003e\r\n      T3M78AA#ABB\r\n     \u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n     \u003ctd class=\"plHeader\"\u003e\r\n"}' 
print(response.encode('utf-8')) 
# prints: b'{"Html":"<div class="panel-body">\r\n  <div class="printContainer">\r\n   <a href="#" data-itemid="237994" data-toggle="tooltip" data-placement="top" data-action="printProductInfo" accesskey="p" rel="nofollow">\r\n    <span class="nonIcon printIcon"></span>&nbsp;Skriv ut\r\n   </a>\r\n  </div>\r\n <table class="table table-striped">\r\n      <tr class="info">\r\n     <th colspan="2" class="plCategoryHeader" style="margin-top: 0">\r\n      Allm&#228;nt\r\n     </th>\r\n    </tr>\r\n    <tr>\r\n     <td class="plHeader">\r\n      Tillv. art. nr.\r\n     </td>\r\n     <td class="plValue">\r\n      T3M78AA#ABB\r\n     </td>\r\n    </tr>\r\n    <tr>\r\n     <td class="plHeader">\r\n"}' 

或者更简单,在这种特定的反应:

response = '{"Html":"\u003cdiv class=\"panel-body\"\u003e\r\n  \u003cdiv class=\"printContainer\"\u003e\r\n   \u003ca href=\"#\" data-itemid=\"237994\" data-toggle=\"tooltip\" data-placement=\"top\" data-action=\"printProductInfo\" accesskey=\"p\" rel=\"nofollow\"\u003e\r\n    \u003cspan class=\"nonIcon printIcon\"\u003e\u003c/span\u003e\u0026nbsp;Skriv ut\r\n   \u003c/a\u003e\r\n  \u003c/div\u003e\r\n \u003ctable class=\"table table-striped\"\u003e\r\n      \u003ctr class=\"info\"\u003e\r\n     \u003cth colspan=\"2\" class=\"plCategoryHeader\" style=\"margin-top: 0\"\u003e\r\n      Allm\u0026#228;nt\r\n     \u003c/th\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n     \u003ctd class=\"plHeader\"\u003e\r\n      Tillv. art. nr.\r\n     \u003c/td\u003e\r\n     \u003ctd class=\"plValue\"\u003e\r\n      T3M78AA#ABB\r\n     \u003c/td\u003e\r\n    \u003c/tr\u003e\r\n    \u003ctr\u003e\r\n     \u003ctd class=\"plHeader\"\u003e\r\n"}' 
print(response[9:-2]) 

第二届方式也将打印所有的换行,让你有一个有效的,很好地格式化HTML。

+0

它与第一个一起工作,只是我想在python2中使用它,因为我可以看到它只能用于python3。 –

+0

对于Python 2.7只是导入unicode_literals: 'from __future__ import unicode_literals' 而且代码将工作相同。 –

+1

这个答案假定unicode转义序列是Python字符串的一部分(并且在解释字符串文字时由Python解析器解释),当问题中的示例看起来像它是原始JSON响应的一部分时。所以这个答案不会真的削减它。特别是当你查看解析后的'response'字符串值时,你会发现'encode()'调用并没有对字符串做任何事情,只是将它转换为一个'bytes'对象(这可能完全不受欢迎! )。 – poke