使用Python从html标记解析JSON

时间:2014-05-27 18:45:50

标签: python regex json python-2.7

我已经使用BeautifulSoup从HTML页面获取以下代码段。我在剥离JSON(FB_DATA之后)时遇到了麻烦。我猜我需要使用re.search,但我在使用REGEX时遇到了麻烦。

该片段是:

<script type="text/javascript">
    var FB_DATA = {
        "foo": bar,
        "two": {
          "foo": bar,
        }};
    var FB_PUSH = []; 
    var FB_PULL = []; 
</script>

2 个答案:

答案 0 :(得分:4)

我认为当.*?匹配除新行之外的任何内容时,您的主要问题是使用.。使用s点匹配 - 换行符修饰符,您可以非常简单地完成此操作:

(?s)    (?# dot-match-all modifier)
var     (?# match var literally)
\s+     (?# match 1+ whitespace)
FB_DATA (?# match FB_DATA literally)
\s*     (?# match 0+ whitespace)
=       (?# match = literally)
\s*     (?# match 0+ whitespace)
(       (?# start capture group)
 \{     (?# match { literally)
 .*?    (?# lazily match 0+ characters)
 \}     (?# match } literally)
)       (?# end capture group)
;       (?# match ; literally)

Demo


您的JSON字符串将位于捕获组#1中。

m = re.search(r"(?s)var\s+FB_DATA\s*=\s*(\{.*?\});", html)
print m.group(1)

答案 1 :(得分:0)

开始
FB_DATA = (\{[^;]*;)

并查看在哪些情况下还不够。