• python 转义字符 html 爬虫


    用python的requests包 抓取某些网页时,返回的html中,一些字段含有一些 转义字符 \\\

    这些转义字符给我们后期处理带来一些麻烦, 比方说 运行js等

    python用print()打印时,其实已经自动处理了一边转义字符

    转自 https://blog.csdn.net/shenkunchang1877/article/details/79086886

    python

    str = """{\"count\":4}"""  #爬虫抓取的数据段
    print(str) 	#这里直接输出str
    >>>{"count":4}
    str = bytes(str, encoding='utf-8')
    print(str)	#转换成bytes输出
    >>>b'{\"count\":4}'
    print(json.loads(str))	#输出出错
    >>>json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

    分析:

    在控制台直接print输出:{"count":4}这是正确的格式。按理说能正常被json解析,如下:

    test2.py:
    
    
    str="{"count":4}"
    print(str)
    print(json.loads(str))
    >>>{"count":4}  #直接输出,输出了不带斜杠的字符串
    >>>{'count': 4}	#这里能被json正常解析
    以上说明print和json.loads都会自动去掉用作转义的反斜杠    "转换成 " 成为正常能被json解析的(不带转义)字符 ,所以这样是能被json解析的!但是test1中的第一个print输出只是将双斜杠转成单斜杠的字符串,去掉了单斜杠的转义,这样仍然是不能被解析的。test1的第二个print说明了这个问题,转换成byte是按字节原样输出的,显示的仍然是双斜杠,所以print和loads都会解析一层的转义即:{\"count\":4}去掉一个单斜杠变成{"count":4},应该要再去掉一层转义,即需要两次反转义才行,可惜我找遍资料也没找到python有解决这个的方法函数,不过最终在网上找到了解决方法。看下面:

    总结:以上问题出现在抓取的数据的时候,python会自动把反斜杠加上转义,比如这里的 “”单反斜杠 会变成对应的双反斜杠"\"  即:把单斜杠给转义了。这样自然不能被json正常解析。(ps:单层转义的字符串传入json.loads()时会自动处理掉)

    解决方法:

    1.使用eval函数

    eval
      功能:将字符串str当成有效的表达式来求值并返回计算结果。
      语法: eval(source[, globals[, locals]]) -> value
      参数:
        source:一个Python表达式或函数compile()返回的代码对象
        globals:可选。必须是dictionary
        locals:可选。任意map对象

    str = """{\"count\":4}"""
    str2 = eval("'{}'".format(str))
    print(str2)
    print(json.loads(str2))

    2.使用正则表达式:

    str1 = re.sub(r'\','',str)
    print(str1)
    print(json.loads(str1))
    >>>{"count":4}   #以上两种都能正常输出得到json数据!!
    >>>{'count': 4}
  • 相关阅读:
    POJ 1095 Trees Made to Order 最详细的解题报告
    Producter and Consumer
    How to use the function of bind
    How to use the functions of apply and call
    Configurate vim tool
    #4713. 方程
    #4709. 树
    #4718. 管理
    #4710. 并
    #4707. 点分治
  • 原文地址:https://www.cnblogs.com/shidexiao/p/9629935.html
Copyright © 2020-2023  润新知