分析javascript代码¶如果所需数据是用javascript硬编码的,则首先需要获取javascript代码: 一旦有了包含javascript代码的字符串,就可以从中提取所需的数据: 你可能会使用 regular expression 以JSON格式提取所需数据,然后可以使用 json.loads() . 例如,如果javascript代码包含类似 var data = {{"field": "value"}}; 您可以按如下方式提取该数据: >>> pattern = r'\bvar\s+data\s*=\s*(\{.*?\})\s*;\s*\n'
>>> json_data = response.css('script::text').re_first(pattern)
>>> json.loads(json_data)
{'field': 'value'}
chompjs 提供将JavaScript对象解析为 dict . 例如,如果javascript代码包含 var data = {{field: "value", secondField: "second value"}}; 您可以按如下方式提取该数据: >>> import chompjs
>>> javascript = response.css('script::text').get()
>>> data = chompjs.parse_js_object(javascript)
>>> data
{'field': 'value', 'secondField': 'second value'}
否则,使用 js2xml 要将javascript代码转换为XML文档,可以使用 selectors . 例如,如果javascript代码包含 var data = {{field: "value"}}; 您可以按如下方式提取该数据: >>> import js2xml
>>> import lxml.etree
>>> from parsel import Selector
>>> javascript = response.css('script::text').get()
>>> xml = lxml.etree.tostring(js2xml.parse(javascript), encoding='unicode')
>>> selector = Selector(text=xml)
>>> selector.css('var[name="data"]').get()
'<var name="data"><object><property name="field"><string>value</string></property></object></var>'
|