我是Python的新手,我正在尝试使用BeautifulSoup从脚本中定义的变量中提取一些数据 .
data = soup.find_all('script', type='text/javascript')
print(data[0])
<script type="text/javascript">
var myvar = {
productid: "101",
productname: "Abc",
};
</script>
您是否知道从myvar变量中提取'productid'和'productname'的简单方法?
3 回答
解析
soup.script.string
将script
标记内的数据保存为字符串 . 您可以在字符串上使用split
来获取位置数据:PRODUCT_ID:
产品名称:
简单来说,我将使用正则表达式
有两种方法 . 容易,错误 . 或者不那么容易,但是正确的 .
我不会向您推荐简单的方法 . 正确的方法是使用Javascript解析器 . 对于现代Javascript,esprima是一个不错的选择 . 有一个interactive online demo,它也可用作Python module .
在这个简单的脚本中,没有太多的事情发生 . 原始令牌列表足以获得您想要的值 . 它看起来像这样:
迭代列表并选择所需的值 .
对于更复杂的情况,可能需要将脚本解析为树并遍历树 .
树更复杂(您可以在交互式页面上查看它),但作为交换,它包含普通令牌列表中缺少的所有上下文信息 . 然后,您将使用访问者模式将此树行走到特定位置 . 如果你有兴趣,Python包有一个example how to use the visitor pattern .