json与re的再次复习
在浏览本文之前,建议先温习一下以下博客的链接:
https://www.cnblogs.com/Masterpaopao/p/10061575.html
一.json
json,在爬虫中毫无疑问扮演着极为重要的角色:
JSON是一种轻量级的数据交换格式,适用于进行数据交互的场景。
在python中,由于把json数据转化为pyth内建数据类型很简单,所以如果找到能返回json数据的url,就尽量使用选择这种url。
我们牢牢记住这一点,
json.loads() --> 把json数据转换为python数据,转换之后的数据类型是字典。
json.dumps()-->把python数据转换为json数据,转换之后的数据类型是字符串,但是你在输出中可能会看不见有引号的存在,格外注意这一点。
那么有时候处理数据的时候,我们想要保留json的原形态,显示其编码,在括号内传递一个ensure_ascii=False的参数
二.re
①re.findall
re.findall功能:在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
总结:re.findall的输出是列表。
常用正则表达式的方法:
一些常见的匹配符号:
. :匹配所有字符除换行符“\n”
"\d":匹配任意的数字
"\w":匹配数字和字母以及下划线
"\s":匹配空白符号,包括相关制表符
匹配贪婪与非贪婪:
②(.*?): 匹配出来括号内的内容
③([\s\S]*?):匹配出来括号内的内容
针对①和②的内容写出一个代码论证:
['123qwe456!@#$']
我们可以对比b和c的输出结果,首先,这两者的输出结果都是列表,这是毫无疑问的,这个需要紧紧记住。
然后就是括号和无括号的区别,无括号的时候匹配出来所有,
有括号的时候,括号两旁的字符成了定位字符,只匹配出来括号内的内容。
②re.sub
re.sub用于替换字符串中的匹配项,是对字符串的指定部分进行正则替换操作的函数。公式如下:
re.sub(pattern, repl, string, count=0, flags=0)
pattern是字符串中要更换的部分,repl是更换的内容,string是原始字符串。
count是需要更换的次数,按顺序更换。其中,count=0是默认替换全部,而不是替换0个。
flags是可选的,表示匹配模式,比如忽略大小写,多行模式等
只需要注意一下输出的结果是字符串,具体的请参考我开头贴的博客,具体我就不再复述了。
正则使用的注意点:
1.re.findall("a(.*?)b","str")能够返回括号中的内容,括号前后的内容起到定位和过滤的效果。
2.原始字符串,待匹配字符串中有反斜杠的时候,使用r能够忽视反斜杠带来的转义的效果。
3.点号默认匹配不到“'\n”,"\s"能够匹配空白字符,不仅仅包含空格,还有“\t”。
那么,我将结合json和re来实战一个简单的爬虫,帮助大家更好的理解: