前两天小编整理一份爬虫的资料,不知道大家伙是否还记得,这一次小编结合所学习的内容,跟大家分享分享。
大家可以给小编提提意见,今天主要分享的是使用正则表达式解析网页。
Python爬虫是非常重要的板块,学起来刚开始有一些迷茫,慢慢的熟悉之后就变成“老司机”,相信刚开始学习python的小伙伴也能和小编一样,可以学着自己分享一下一些东西。
每一个上班族或者就算宅在家的人,每天都需要打开网页搜索资料,所以今天我们就利用Python爬虫,来解析网页。
话不多少,下面正式开始分享
认识正则表达式
正则表达式就是对字符串进行操作的逻辑公式,相当于‘过滤’这个字符串。
一开始学习可能是懵懂的,小编就是这样,后来一直不停的复习,总算是学会了。
常用的正则表达式
单字符:
. : 除换行以外所有字符
[] :[aoe] [a-w] 匹配集合中任意一个字符
\\d :数字 [0-9]
\\D : 非数字
\\w :数字、字母、下划线、中文
\\W : 非\\w
\\s :所有的空白字符包,括空格、制表符、换页符等等。等价于 [ \\f\\n\\r\\t\\v]。
\\S : 非空白
数量修饰:
* : 任意多次 >=0
+ : 至少1次 >=1
? : 可有可无 0次或者1次
{m} :固定m次 hello{3,}
{m,} :至少m次
{m,n} :m-n次
边界:
$ : 以某某结尾
^ : 以某某开头
分组:
(ab)
贪婪模式: .*
非贪婪(惰性)模式: .*?
re.I : 忽略大小写
re.M :多行匹配
re.S :单行匹配
re.sub(正则表达式, 替换内容, 字符串)
re.match方法
这里直接来讲解正则表达式的re.match方法:
先上一批代码:
import re
test=re.match('www','www.baidu.com')
print('result:',test)
print('begin and end tuple:',test.span())
print('begin:',test.start())
print('end:',test.end())
利用re.match方法,结果为:
result: <re.match>
begin and end tuple:(0, 3)
begin:0
end:3
span()是匹配结果的开始位置和结束位置
start()和end()则是分别开始和结束。
下面试着把pattern进行一些改变:
import re
pattern='Cats are smarter than dogs'
test=re.match(r'(.*) are (.*?) dogs',pattern)
print('the whole sentence:',test.group(0))
print('the first result:',test.group(1))
print('the second result:',test.group(2))
print('a tuple for result:',test.groups())
最终结果,你会得到:
the whole sentence: Cats are smarter than dogs
the first result: Cats
the second result: smarter than
a tuple for result: ('Cats', 'smarter than')
注意:r表示纯字符,防止反斜杠转译。
()里面小编这里用的是嵌入正则表达式,所以就最后匹配了Cats和smarter than。
re.search方法
re.match只从字符串开始进行匹配,请看下面代码:
import re
link='www.baidu.com'
print(re.match('baidu',link))
print(re.search('baidu',link))
结果显示:
None
<re.match>
从这里就可以看到,这两者的区别,match发现开头没有就直接返回None了,而search则从头扫描到尾。
re.findall方法
这个就是比较牛掰的方法,也是小编常用的,因为它可以找到所有的匹配。比如:
import re
link='www.baidu.com www.baidu,com'
print(re.match('www',link))
print(re.search('www',link))
print(re.findall('www',link))
结果如下:
<re.match>
<re.match>
['www', 'www']
我们可以看到Match和search只能返回一个www,但是使用findall可以找到所有的哦,所以小编可以推荐大家使用re.findall方法,不过也要根据自己情况而定。
这三种方法,小编做了稍微的总结,用一句话概括:一山还比一山高。
search比Match用起来则更加灵活,findall又比前两者爬取到更多网页知识,整体学起来是不是很难,主要是需要对症下药,找到合适的匹配规则。
其实小编学习python爬虫时间并不长,在此期间加入了一个学习python的社群,天天与学习python的童鞋们交流分享,不懂的问题也有助教老师帮我们分析,所以说掌握知识很简单,如果你也想加入我们这个大家庭,欢迎来私信小编~
如果你对这篇文章感兴趣,或者你身边的人正在学习python,可以分享给朋友们一起交流学习。
閱讀更多 Q小小科技 的文章