使用literal_eval()解析字典字符串时遇前导零语法错误求助
解决literal_eval解析JSON字符串时的SyntaxError问题
问题分析
你遇到的SyntaxError: leading zeros in decimal integer literals are not permitted提示,从提供的字符串看并无明显前导零数字,核心问题是JSON字符串格式不合法:
description字段内的转义双引号存在未闭合情况(末尾"Analizar...servicio"缺少闭合引号)- 爬取过程可能引入不可见特殊字符或转义处理错误,导致解析器误判内容
解决步骤
1. 修复字符串语法错误
先手动修正description末尾的未闭合引号,将最后一段的...servicio"改为...servicio\\"",确保所有转义引号成对匹配。
2. 用json.loads替代literal_eval
literal_eval对Python语法要求严苛,而json.loads更适配JSON格式解析。若之前使用json.loads失败,先做格式预处理:
import json # 替换为你实际爬取到的字符串 raw_str = """{"@type":"JobPosting", "title":"Coordinador de aduanas", "hiringOrganization":{"@type":"JobPosting", "name":"Agencia Pública de Empleo", "sameAs":"https://agenciapublicadeempleo.sena.edu.co", "logo":"https://agenciapublicadeempleo.sena.edu.co/imgLayout/LOGO%20APE%201.png"}, "workHours":"Se informa el día de la entrevista", "validThrough":"2022-08-25", "jobLocation":{"@type":"Place", "address":{"@type":"PostalAddress", "addressCountry":"Colombia", "addressLocality":"Medellín", "addressRegion":"Antioquia" } }, "employmentType":"Indefinido", "description": "funciones: Firmar documentos de importación y exportación según procesos y políticas de la organización - Asesorar a clientes sobre restricciones de importación y exportación, sistemas tarifarios, cartas de crédito, requisitos para el seguro y otros asuntos aduaneros. - Atender clientes según requerimientos y protocolos de servicio. - Desarrollar la operación de importación y exportación de mercancías según normativa de comercio exterior. - Controlar el proceso de importación y exportación de mercancías según normativa de comercio exterior. - Liquidar impuestos y derechos aduaneros de mercancías según normativa de comercio exterior.Técnico o tecnólogo en comercio exterior. alertar internamente sobre los beneficios que puede adquirir un cliente de acuerdo a lo establecido en la norma y gestionar oportunamente el manejo Financiero Régimen Aduanero. importación de vehiculos y autopartes buen manejo ofimatico Habilidades: \" Verificar la documentación y comparar la misma con lo establecido normativamente para alertar sobre documentación faltante o errada. Diligenciar oportunamente y de forma correcta y precisa las declaraciones Gestionar documentación faltante con el servicio al cliente Alerta sobre omisiones o faltantes por parte del cliente que afecten el pago del impuesto\" Competencias: \"Analizar la documentación requerida para la nacionalización con el objetivo de proceder en la elaboración detallada de la declaración de importación y del valor, realizar el procedimiento de manera eficiente y eficaz, cumpliendo con los estándares establecidos por Aduanas ML frente a calidad, productividad y servicio\"", "datePosted":"2022-07-11", "baseSalary":{"@type":"MonetaryAmount", "currency":"COP", "value":{"unitText":"MONTH", "@type":"QuantitativeValue", "maxValue":"2000000", "minValue":"1500001" } } }""" try: job_dict = json.loads(raw_str) print("解析成功:", job_dict["title"]) except json.JSONDecodeError as e: print(f"解析错误详情:{e}")
3. 优化爬取环节的内容提取
爬取时优先直接提取完整的JSON脚本(比如页面中type="application/ld+json"的<script>标签),避免手动拼接字符串引入格式错误:
from bs4 import BeautifulSoup import requests import json url = "你的目标URL" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # 提取结构化JSON数据 json_script = soup.find("script", type="application/ld+json") if json_script: try: job_dict = json.loads(json_script.string.strip()) print(job_dict["description"]) except json.JSONDecodeError as e: print(f"解析失败:{e}")
4. 排查并处理隐藏前导零
若仍出现前导零错误,说明爬取的字符串中存在"0123"这类格式的数字,用正则替换去除前导零:
import re # 替换字符串中所有带前导零的字符串型数字 fixed_str = re.sub(r'"0+(\d+)"', r'"\1"', raw_str) job_dict = json.loads(fixed_str)
关键提示
- 优先使用
json.loads处理JSON格式字符串,literal_eval更适合Python原生字面量(如字典、列表的Python代码格式) - 爬取结构化数据时,直接提取页面中的JSON脚本标签是最可靠的方式,能避免手动处理转义字符的麻烦
内容的提问来源于stack exchange,提问作者Jack Vaughan
相关产品推荐
相关产品推荐

