如何使用python解析Javascript变量?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用python解析Javascript变量?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2757字,纯文字阅读大概需要4分钟。
内容图文
![如何使用python解析Javascript变量?](/upload/InfoBanner/zyjiaocheng/698/bacdee380f2a464e8676fd0f1772c6b6.jpg)
问题:我试图从中收集数据的网站使用Javascript来生成图表.我希望能够提取图中使用的数据,但我不知道从哪里开始.例如,数据可能如下:
var line1=
[["Wed, 12 Jun 2013 01:00:00 +0000",22.4916114807,"2 sold"],
["Fri, 14 Jun 2013 01:00:00 +0000",27.4950008392,"2 sold"],
["Sun, 16 Jun 2013 01:00:00 +0000",19.5499992371,"1 sold"],
["Tue, 18 Jun 2013 01:00:00 +0000",17.25,"1 sold"],
["Sun, 23 Jun 2013 01:00:00 +0000",15.5420341492,"2 sold"],
["Thu, 27 Jun 2013 01:00:00 +0000",8.79045295715,"3 sold"],
["Fri, 28 Jun 2013 01:00:00 +0000",10,"1 sold"]];
这是定价数据(日期,价格,数量).我在这里发现了另一个问题 – Parsing variable data out of a js tag using python – 这表明我使用JSON和BeautifulSoup,但我不确定如何将它应用于这个特定问题,因为格式略有不同.事实上,在这个问题中,代码看起来更像是python而不是任何类型的JSON字典格式.
我想我可以用字符串读取它,然后使用XPATH和一些时髦的字符串编辑来转换它,但这对于已经格式化为Javascript变量的东西来说似乎太多了.
那么,在使用python时,我可以在这里从这个变量中提取这种有组织的数据? (我最熟悉python和BS4)
解决方法:
如果您的格式只是一个或多个var foo = [JSON数组或对象文字];,您可以编写一个dotall正则表达式来提取它们,然后将每个格式解析为JSON.例如:
>>> j = '''var line1=
[["Wed, 12 Jun 2013 01:00:00 +0000",22.4916114807,"2 sold"],
["Fri, 14 Jun 2013 01:00:00 +0000",27.4950008392,"2 sold"],
["Sun, 16 Jun 2013 01:00:00 +0000",19.5499992371,"1 sold"],
["Tue, 18 Jun 2013 01:00:00 +0000",17.25,"1 sold"],
["Sun, 23 Jun 2013 01:00:00 +0000",15.5420341492,"2 sold"],
["Thu, 27 Jun 2013 01:00:00 +0000",8.79045295715,"3 sold"],
["Fri, 28 Jun 2013 01:00:00 +0000",10,"1 sold"]];\s*$'''
>>> values = re.findall(r'var.*?=\s*(.*?);', j, re.DOTALL | re.MULTILINE)
>>> for value in values:
... print(json.loads(value))
[[['Wed, 12 Jun 2013 01:00:00 +0000', 22.4916114807, '2 sold'],
['Fri, 14 Jun 2013 01:00:00 +0000', 27.4950008392, '2 sold'],
['Sun, 16 Jun 2013 01:00:00 +0000', 19.5499992371, '1 sold'],
['Tue, 18 Jun 2013 01:00:00 +0000', 17.25, '1 sold'],
['Sun, 23 Jun 2013 01:00:00 +0000', 15.5420341492, '2 sold'],
['Thu, 27 Jun 2013 01:00:00 +0000', 8.79045295715, '3 sold'],
['Fri, 28 Jun 2013 01:00:00 +0000', 10, '1 sold']]]
当然这会做一些假设:
>行末尾的分号必须是实际的语句分隔符,而不是字符串的中间.这应该是安全的,因为JS没有Python风格的多行字符串.
>代码实际上在每个语句的末尾都有分号,即使它们在JS中是可选的.大多数JS代码都有那些分号,但显然不能保证.
>数组和对象文字实际上是JSON兼容的.绝对不能保证;例如,JS可以使用单引号字符串,但JSON不能.但它确实适用于你的例子.
>你的格式确实很明确.例如,如果可能有类似var line2 = [[1]] line1的语句;在代码中间,它会导致问题.
请注意,如果数据可能包含并非所有有效JSON的JavaScript文字,但都是有效的Python文字(这不太可能,但也不是不可能),您可以在它们上使用ast.literal_eval而不是json .loads.但除非你知道情况如此,否则我不会这样做.
内容总结
以上是互联网集市为您收集整理的如何使用python解析Javascript变量?全部内容,希望文章能够帮你解决如何使用python解析Javascript变量?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。