用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}

python 转义字符 html 爬虫的更多相关文章

  1. python 3.x 爬虫基础---正则表达式

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

  2. Python 开发轻量级爬虫08

    Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...

  3. Python 开发轻量级爬虫07

    Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...

  4. Python 开发轻量级爬虫06

    Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...

  5. Python 开发轻量级爬虫05

    Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...

  6. Python 开发轻量级爬虫04

    Python 开发轻量级爬虫 (imooc总结04--url管理器) 介绍抓取URL管理器 url管理器用来管理待抓取url集合和已抓取url集合. 这里有一个问题,遇到一个url,我们就抓取它的内容 ...

  7. Python 开发轻量级爬虫03

    Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...

  8. Python 开发轻量级爬虫02

    Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url, ...

  9. Python 开发轻量级爬虫01

    Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...

随机推荐

  1. 自制操作系统Antz(5)——深入理解保护模式与进入方法

    Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs. ...

  2. [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组

    程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...

  3. 2018.9.22 NOIP模拟赛

    *注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...

  4. Linux学习进阶示意图

    Linux 基础 Linux 基础 Linux安装专题教程 Linux中文环境 Linux—从菜鸟到高手 鸟哥的Linux私房菜 基础学习篇(第二版) Ubuntu Linux入门到精通 Linux标 ...

  5. fastDfs V5.02 升级到 V5.08版本后,启动报错:symbol lookup error: /usr/bin/fdfs_trackerd: undefined symbol: g_current_time

    /libfastcommon-1.0.36 # ./make.sh cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O3 -c -o hash.o ...

  6. spark中的combineByKey函数的用法

    一.函数的源码 /** * Simplified version of combineByKeyWithClassTag that hash-partitions the resulting RDD ...

  7. Caffarelli 关于自由边界正则性的论文C1

    Caffarelli 关于自由边界正则性的论文 接下来主要想叙述一下Caffarelli的C1文章中的一些想法,这是最近这几天看的文献. 对于从自由边界的Lipschitz正则性到$C^{1,\alp ...

  8. 画一条0.5px的线

    通过伪类元素:after为其添加样式,用transform:scaleY令其在垂直方向缩小0.5倍 .div:after{ height: 1px; transform: scaleY(0.5); t ...

  9. Wincc用户登录VBS脚本

    在Wincc中为防止未知用户的误操作,在操作性按钮以及图符等设备操作面板,在组流程图时,需设置用户权限,只有符合权限的用户才可以进行操作.所以在流程图界面需设置系统用户登录界面.登录操作可以选择按钮或 ...

  10. Centos 7 搭建DNS笔记

    bindind的程序包 bind-libs:被bind和bind-utils包中的程序共同用到的库文件: bind-utils:bind客户端程序集:提供了,dig , host, nslookup等 ...