在浏览本文以前,建议先温习一下如下博客的连接:html
https://www.cnblogs.com/Masterpaopao/p/10061575.htmlpython
一.json正则表达式
json,在爬虫中毫无疑问扮演着极为重要的角色:json
JSON是一种轻量级的数据交换格式,适用于进行数据交互的场景。函数
在python中,因为把json数据转化为pyth内建数据类型很简单,因此若是找到能返回json数据的url,就尽可能使用选择这种url。编码
咱们紧紧记住这一点,url
json.loads() --> 把json数据转换为python数据,转换以后的数据类型是字典。spa
json.dumps()-->把python数据转换为json数据,转换以后的数据类型是字符串,可是你在输出中可能会看不见有引号的存在,格外注意这一点。code
那么有时候处理数据的时候,咱们想要保留json的原形态,显示其编码,在括号内传递一个ensure_ascii=False的参数orm
二.re
①re.findall
re.findall功能:在字符串中找到正则表达式所匹配的全部子串,并返回一个列表,若是没有找到匹配的,则返回空列表。
总结:re.findall的输出是列表。
经常使用正则表达式的方法:
一些常见的匹配符号:
. :匹配全部字符除换行符“\n”
"\d":匹配任意的数字
"\w":匹配数字和字母以及下划线
"\s":匹配空白符号,包括相关制表符
匹配贪婪与非贪婪:
②(.*?): 匹配出来括号内的内容
③([\s\S]*?):匹配出来括号内的内容
针对①和②的内容写出一个代码论证:
咱们能够对比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来实战一个简单的爬虫,帮助你们更好的理解: