如何从Scrapy响应中的脚本标记中提取Javascript变量?

时间:2018-08-06 10:06:23

标签: javascript python-2.7 xpath scrapy

<script type="text/javascript">

define('roomsAndRatesData', function() {
var roomsAndRatePlans = {"propertyData":{"bookingFeeMessageEnabled":true}},{"rooms":{"24-285501":{"locale":"en"}}}

};
</script>

在该脚本中还定义了其他变量。我只需要“ var roomsAndRatePlans”变量内的数据,任何人都可以建议解决方案以仅获取该变量数据。

我尝试了其他解决方案,但始终会检索该脚本标记内的所有数据,并转换该数据会引发错误。

所以请提供给我解决方案以仅获取该脚本的特定数据

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用js2xml库:

>>> import js2xml
>>> from js2xml.utils.vars import get_vars
>>> snippet = '''
var product = {"price": 10.93, "stock": false, "name": "JBL"};
var analytics = {"id": 1234};
'''
>>> get_vars(js2xml.parse(snippet))
{
    'product': {'price': 10.93, 'stock': False, 'name': 'JBL'},
    'analytics': {'id': 1234}
}

您的JS代码段似乎不完整,因此我在这里使用了一个虚拟代码段。 在您的情况下,您可能首先需要通过以下方式获取JS代码:

>>> snippet = response.css('script:contains("roomsAndRatesData")::text').get()