在我的一个脚本中,我使用urllib2
和BeautifulSoup
来解析HTML页面并阅读<script>
标记。
这就是我得到的:
<script>
var x_data = {
logged: logged,
lengthcarrousel: 2,
products : [
{
"serial" : "106541823"
...
</script>
我的目标是阅读x_data
变量中的JSON,我不知道如何正确地完成它。
我虽然:
我不知道这些是否有效,以及是否有其他方法可以很好地完成。
你认为一种方法比另一种更好吗?我可能没有意识到的任何方法?
提前感谢您的任何建议。
编辑:
根据建议,我获得了Regexp解决方案,但是尽管使用了re.MULTILINE,我仍然无法进行多行搜索:
string1 = '<script>
var x_data = {
logged: logged,
lengthcarrousel: 2,
products : [
{
"serial" : "106541823"}
]
};
</script>'
p = re.compile(r'\{.*\};',re.MULTILINE);
m = p.search(string1)
if m:
print m.group(0)
else:
print "Error !"
我总是得到一个&#34;错误!&#34;。
EDIT2:
适用于re.DOTALL
。
答案 0 :(得分:2)
我认为这些方法在优雅和性能方面基本相同(使用 {。*}
可能稍好一些,因为。*
是贪婪的,即会几乎没有回溯,因为在我看来,对于不同的JS代码格式细微差别,我更“宽容”。您可能更感兴趣的是: https://docs.python.org/ 3.6 /库/ json.html
答案 1 :(得分:1)
如果它看起来总是这样,那么你就可以像你提出的那样解决一个类似于它的解决方案。
因为程序员在代码中做了所有事情,我怀疑在实践中它不会完全看起来如此,然后任何hacky解决方案都将是脆弱的并且会在意外(阅读&#34;不可能的不方便&#34;)时刻失败。 (在解析代码时,已知正则表达式是hacky)。
如果你想要做到这一点,你需要获得一个真正的JavaScript解析器,将其应用于脚本标记内容定义的代码片段,以生成AST,然后在AST中搜索恰好碰巧的JavaScript嵌套结构看起来像JSON,并获取那棵树的内容,漂亮印刷。
面对使用JavaScript赋值语句汇编JSON片段的程序员,即使这样也很脆弱。您可以通过计算数据流并发现碰巧汇编JSON代码的代码集来处理这个问题。这是相当多的工作。
因此,您可以决定解决方案的限制是什么,然后接受当您无法控制的人随机做某些事情时的后果。