如何解析奇怪的Python请求响应?

如何解析奇怪的Python请求响应?,python,json,xml,web-scraping,python-requests,Python,Json,Xml,Web Scraping,Python Requests,我正在为一个客户做一件工作,我需要从他们的网站上获取一些数据。用一个随机的post代码命中他们的端点,正确的JSON会成功,但响应不是我所期望的 它实际上看起来像是有效的JSON,但在HTML键中包含转义HTML以及新行,并在前后返回 我可以使用以下方法将其解析为字典: json_string = json.loads(r.text) 我无法访问其中的HTML键,尽管Python说它是一个字符串 事实上我不知道该怎么办。。有什么想法我可以用Python解析它,这样我就可以把HTML放到漂亮的汤

我正在为一个客户做一件工作,我需要从他们的网站上获取一些数据。用一个随机的post代码命中他们的端点,正确的JSON会成功,但响应不是我所期望的

它实际上看起来像是有效的JSON,但在HTML键中包含转义HTML以及新行,并在前后返回

我可以使用以下方法将其解析为字典:

json_string = json.loads(r.text)
我无法访问其中的HTML键,尽管Python说它是一个字符串

事实上我不知道该怎么办。。有什么想法我可以用Python解析它,这样我就可以把HTML放到漂亮的汤里

 {'d': '{\r\n  "result": "200",\r\n  "HTML": "<table style=\\"max-width:750px;\\"><tr id=\'resultsHeader2\'><th class=\'thMid\'>Select</td><th class=\'thMid\'>Address</td><th class=\'thMid\'>Street</td><th class=\'thMid\'>Area</td><th class=\'thMid\'>Postcode</td></tr><tr class=\'tResults\' id=\'uprnRow0\'><td id=\'uprnButton0\'><button type=\'button\' onclick=\\"changeText(\'uprnButton0\',\'Loading\');populAddr(\'105 BERKSHIRE DRIVE RAMLEAZE SWINDON SN1 5RP\');getobject(\'divAddress\').innerHTML = \'\';GetInfoAndRoundsFor(\'345634564356\',\'SWN\');\\" title=\'Get Calendar for this address\'>Show</button></td><td>105</td><td>BERKSHIRE DRIVE</td><td>RAMLEAZE<br/>SWINDON</td><td>SN1 5RP</td><tr class=\'tResults\' id=\'uprnRow1\'><td id=\'uprnButton1\'><button type=\'button\' onclick=\\"changeText(\'uprnButton1\',\'Loading\');populAddr(\'150 BERKSHIRE DRIVE RAMLEAZE SWINDON SN15 5RP\');getobject(\'divAddress\').innerHTML = \'\';GetInfoAndRoundsFor(\'3456346435634\',\'SWN\');\\" title=\'Get Calendar for this address\'>Show</button></td><td>150</td><td>BERKSHIRE DRIVE</td><td>RAMLEAZE<br/>SWINDON</td><td>SN15 5RP</td><tr><td class=\'tableFoot\' colspan=\'5\'></tr></table>",\r\n  "r1": "Swindon",\r\n  "r2": "",\r\n  "r3": ""\r\n}'}

这项服务有点奇怪。检查我对这个问题的评论。在原始JSON数组的属性
“d”
中似乎还有一个额外的JSON数组:

json.loads(json.loads(r.text)['d'])
我得到:

{
     u'HTML': u'<table style="max-width:750px;"><tr id=\'resultsHeader2\'><th class=\'thMid\'>Select</td><th class=\'thMid\'>Address</td><th class=\'thMid\'>Street</td><th class=\'thMid\'>Area</td><th class=\'thMid\'>Postcode</td></tr><tr class=\'tResults\' id=\'uprnRow0\'><td id=\'uprnButton0\'><button type=\'button\' onclick="changeText(\'uprnButton0\',\'Loading\');populAddr(\'105 BERKSHIRE DRIVE RAMLEAZE SWINDON SN1 5RP\');getobject(\'divAddress\').innerHTML = \'\';GetInfoAndRoundsFor(\'345634564356\',\'SWN\');" title=\'Get Calendar for this address\'>Show</button></td><td>105</td><td>BERKSHIRE DRIVE</td><td>RAMLEAZE<br/>SWINDON</td><td>SN1 5RP</td><tr class=\'tResults\' id=\'uprnRow1\'><td id=\'uprnButton1\'><button type=\'button\' onclick="changeText(\'uprnButton1\',\'Loading\');populAddr(\'150 BERKSHIRE DRIVE RAMLEAZE SWINDON SN15 5RP\');getobject(\'divAddress\').innerHTML = \'\';GetInfoAndRoundsFor(\'3456346435634\',\'SWN\');" title=\'Get Calendar for this address\'>Show</button></td><td>150</td><td>BERKSHIRE DRIVE</td><td>RAMLEAZE<br/>SWINDON</td><td>SN15 5RP</td><tr><td class=\'tableFoot\' colspan=\'5\'></tr></table>',
     u'r3': u'',
     u'result': u'200',
     u'r2': u'',
     u'r1': u'Swindon'
}
{
u'HTML':u'selectAddressStreetAreaPostCodeShow105伯克希尔大道
SWINDONSN1 5rpShow150伯克希尔大道
SWINDONSN15 5RP', u'r3':u', u'result':u'200', u'r2':u', u'r1':u'Swindon' }
在JSON中看起来像JSON中的HTML。请尝试使用任何编码格式将其转换为正确的字符串。事实上,这是一个有效的JSON,但可能是您错误地处理了响应。显示生成它的代码。我们可以看到r.textYep刚刚修改的实际值吗。。我希望我没有错过一些明显的东西。非常感谢你花时间帮我做这件事!这起作用了,我很高兴不仅仅是我觉得这很奇怪。。我会给他们这个反馈。
{
     u'HTML': u'<table style="max-width:750px;"><tr id=\'resultsHeader2\'><th class=\'thMid\'>Select</td><th class=\'thMid\'>Address</td><th class=\'thMid\'>Street</td><th class=\'thMid\'>Area</td><th class=\'thMid\'>Postcode</td></tr><tr class=\'tResults\' id=\'uprnRow0\'><td id=\'uprnButton0\'><button type=\'button\' onclick="changeText(\'uprnButton0\',\'Loading\');populAddr(\'105 BERKSHIRE DRIVE RAMLEAZE SWINDON SN1 5RP\');getobject(\'divAddress\').innerHTML = \'\';GetInfoAndRoundsFor(\'345634564356\',\'SWN\');" title=\'Get Calendar for this address\'>Show</button></td><td>105</td><td>BERKSHIRE DRIVE</td><td>RAMLEAZE<br/>SWINDON</td><td>SN1 5RP</td><tr class=\'tResults\' id=\'uprnRow1\'><td id=\'uprnButton1\'><button type=\'button\' onclick="changeText(\'uprnButton1\',\'Loading\');populAddr(\'150 BERKSHIRE DRIVE RAMLEAZE SWINDON SN15 5RP\');getobject(\'divAddress\').innerHTML = \'\';GetInfoAndRoundsFor(\'3456346435634\',\'SWN\');" title=\'Get Calendar for this address\'>Show</button></td><td>150</td><td>BERKSHIRE DRIVE</td><td>RAMLEAZE<br/>SWINDON</td><td>SN15 5RP</td><tr><td class=\'tableFoot\' colspan=\'5\'></tr></table>',
     u'r3': u'',
     u'result': u'200',
     u'r2': u'',
     u'r1': u'Swindon'
}