парсинг json в python

Рейтинг: -3Ответов: 1Опубликовано: 27.02.2023

Парсю html, на странице ищу название и расширение файла

fr = requests('https://www.geooptic.ru/product/lasernyi-skanner-trimble-x7-kit-with-t10x').text
bb_strings = re.findall(r'files:.*.short_params', fr)

на выходе получается

fr = files:[{file_name:"obzor-skanerov-trimble.pdf",name:"Сравнение сканеров TRIMBLE X7, TX6, TX8 и тахеометра SX10 (2019 год)",type_id:eW},{file_name:"Trimble T10x tablet_Datasheet.pdf",name:"Trimble T10x tablet_Datasheet",type_id:4},{file_name:"Сравнение приборов Trimble 2022 X7 X12 SX12.pdf",name:"Сравнение приборов Trimble 2022 X7 X12 SX12",type_id:eW}]

как сделать что бы было?

Сравнение сканеров TRIMBLE X7, TX6, TX8 и тахеометра SX10 (2019 год) : obzor-skanerov-trimble.pdf

Ответы

▲ 0Принят

Так как у вас в bb_strings получается список из одной строки, то можно её разбить по кавычкам, взять из неё нужные четные элементы, и затем собрать из них словарь.

import requests
import re


fr = requests.get('https://www.geooptic.ru/product/lasernyi-skanner-trimble-x7-kit-with-t10x').text

bb_list1 = re.findall('files:.*.short_params', fr)[0].split('"')

bb_list2 = [x for i, x in enumerate(bb_list1) if i % 2]

bb_dict = {}

for i in range(0, len(bb_list2), 2):
    bb_dict[bb_list2[i + 1]] = bb_list2[i]

print(bb_dict)

----------------------------------

{'Сравнение сканеров TRIMBLE X7, TX6, TX8 и тахеометра SX10 (2019 год)': 'obzor-skanerov-trimble.pdf',
 'Trimble T10x tablet_Datasheet': 'Trimble T10x tablet_Datasheet.pdf',
 'Сравнение приборов Trimble 2022 X7 X12 SX12': 'Сравнение приборов Trimble 2022 X7 X12 SX12.pdf'}

Как еще вариант - двумя регулярками добыть нужные подстроки и затем сразу собрать из них словарь.