Для первого сценария, да, нет лучшего варианта, чем декодировать его напрямую с помощью json
.
Для второго сценария, конечно, вы всегда можете использовать регулярные выражения, но более чистое и лучшее решение Iрекомендовал бы использовать js2xml
, который преобразует JavaScript в формат запроса xpath:
$ pip install js2xml
скажем, один скрипт имеет следующую структуру:
<script type="text/javascript">
window.articleInfo = {
'id': 'S1006',
'model': 'Cellini Time',
'brand': 'Rolex',
'reference': '50505',
'priceLocal': '11500',
'currencyCode': 'EUR'
};
</script>
форматирование будет выглядеть так:
import js2xml
...
parsed = js2xml.parse(response.xpath('//script/text()').extract_first())
Вы можете увидеть структуру parsed
с:
>> print(js2xml.pretty_print(parsed))
>> <program>
<assign operator="=">
<left>
<dotaccessor>
<object>
<identifier name="window"/>
</object>
<property>
<identifier name="articleInfo"/>
</property>
</dotaccessor>
</left>
<right>
<object>
<property name="id">
<string>S1006</string>
</property>
<property name="model">
<string>Cellini Time</string>
</property>
<property name="brand">
<string>Rolex</string>
</property>
<property name="reference">
<string>50505</string>
</property>
<property name="priceLocal">
<string>11500</string>
</property>
<property name="currencyCode">
<string>EUR</string>
</property>
</object>
</right>
</assign>
</program>
Что означает, что теперь вы можете получить информациювам нужно вот так:
parsed.xpath('//property[@name="id"]/string/text()')[0]
parsed.xpath('//property[@name="model"]/string/text()')[0]
parsed.xpath('//property[@name="brand"]/string/text()')[0]
...
Я надеюсь, что смогу вам помочь с этим.