[英]Extract Text from Javascript using Python
我一直在研究如何执行此操作的示例,但还不太清楚。 我正在使用beautifulsoup抓取一些数据-我可以使用它来查找所需的数据,但是它包含在以下代码块中。 我正在尝试从中提取时间戳信息。 我有一个正则表达式在这里起作用的感觉,但我似乎无法弄清楚-有什么建议吗?
<script class="code" type="text/javascript">
$(document).ready(function(){
line1 = [['2009-02-23 10 AM', 5203], ['2009-02-08 10 AM', 3898], ['2009-02-09 10 AM', 4923], ['2009-02-22 10 AM', 3682], ['2009-02-21 10 AM', 3238], ['2009-02-20 10 AM', 4648]];
options1 = {
etc other text
}
});
</script>
您不能使用BS来获取此数据-BS仅适用于HTML / XML,不适用于JavaScript。
您必须使用regular expressions
或标准字符串函数。
编辑:
text = '''<script class="code" type="text/javascript">
$(document).ready(function(){
line1 = [['2009-02-23 10 AM', 5203], ['2009-02-08 10 AM', 3898], ['2009-02-09 10 AM', 4923], ['2009-02-22 10 AM', 3682], ['2009-02-21 10 AM', 3238], ['2009-02-20 10 AM', 4648]];
options1 = {
etc other text
}
});
</script>'''
import re
re.findall("'([^']*)'", text)
结果:
['2009-02-23 10 AM',
'2009-02-08 10 AM',
'2009-02-09 10 AM',
'2009-02-22 10 AM',
'2009-02-21 10 AM',
'2009-02-20 10 AM']
使用正则表达式解析javascript代码的另一种替代方法是使用slimit
类的JavaScript解析器。 工作代码:
import json
from bs4 import BeautifulSoup
from slimit import ast
from slimit.parser import Parser
from slimit.visitors import nodevisitor
data = """<script class="code" type="text/javascript">
$(document).ready(function(){
line1 = [['2009-02-23 10 AM', 5203], ['2009-02-08 10 AM', 3898], ['2009-02-09 10 AM', 4923], ['2009-02-22 10 AM', 3682], ['2009-02-21 10 AM', 3238], ['2009-02-20 10 AM', 4648]];
options1 = {};
});
</script>"""
soup = BeautifulSoup(data, "html.parser")
parser = Parser()
tree = parser.parse(soup.script.get_text())
for node in nodevisitor.visit(tree):
if isinstance(node, ast.Assign) and getattr(node.left, 'value', '') == 'line1':
values = json.loads(node.right.to_ecma().replace("'", '"').strip())
print(values)
break
打印一个Python列表:
[[u'2009-02-23 10 AM', 5203], [u'2009-02-08 10 AM', 3898], [u'2009-02-09 10 AM', 4923], [u'2009-02-22 10 AM', 3682], [u'2009-02-21 10 AM', 3238], [u'2009-02-20 10 AM', 4648]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.