• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python爬虫之正则表达式的使用教程详解

python 搞代码 4年前 (2022-01-07) 40次浏览 已收录 0个评论

本文实例代码相结合给大家详细介绍了Python爬虫之正则表达式的使用,包括参数介绍,最常规的匹配,匹配目标,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

正则表达式的使用

re.match(pattern,string,flags=0)

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none

参数介绍:

pattern:正则表达式

string:匹配的目标字符串

flags:匹配模式

正则表达式的匹配模式:

最常规的匹配

 import re content ='hello 123456 World_This is a Regex Demo' print(len(content)) result = re.match('^hello\s\d{6}\s\w{10}.*Demo$$',content) print(result) print(result.group()) #返回匹配结果 print(result.span()) #返回匹配结果的范围

结果运行如下:

39

hello 123456 World_This is a Regex Demo
(0, 39)

泛匹配

使用(.*)匹配更多内容

 import re content ='hello 123456 World_This is a Regex Demo' result = re.match('^hello.*Demo$',content) print(result) print(result.group())

结果运行如下:

hello 123456 World_This is a Regex Demo

匹配目标

在正则表达式中使用()将要获取的内容括起来

使用group(1)获取第一处,group(2)获取第二处,如此可以提取我们想要获取的内容

 import re content ='hello 123456 World_This is a Regex Demo' result = re.match('^hello\s(\d{6})\s.*Demo$',content) print(result) print(result.group(1))#获取匹配目标

结果运行如下:

123456

贪婪匹配

 import re content ='hello 123456 World_This is a Regex Demo' result = re.match('^he.*(\d+).*De<span style="color:transparent">来源gaodai#ma#com搞*!代#%^码网</span>mo$',content) print(result) print(result.group(1))

注意:.*会尽可能的多匹配字符

非贪婪匹配

 import re content ='hello 123456 World_This is a Regex Demo' result = re.match('^he.*?(\d+).*Demo$',content) print(result) print(result.group(1)) 

注意:.*?会尽可能匹配少的字符

使用匹配模式

在解析HTML代码时会有换行,这时我们就要使用re.S

 import re content ='hello 123456 World_This ' \ 'is a Regex Demo' result = re.match('^he.*?(\d+).*?Demo$',content,re.S) print(result) print(result.group(1))

运行结果如下:

123456

转义

在解析过程中遇到特殊字符,就需要做转义,比如下面的$符号。

 import re content = 'price is $5.00' result = re.match('^price.*\$5\.00',content) print(result.group())

总结:尽量使用泛匹配,使用括号得到匹配目标,尽量使用非贪婪模式,有换行就用re.S

 re.search(pattern,string,flags=0)

re.search扫描整个字符串并返回第一个成功的匹配。

比如我想要提取字符串中的123456,使用match方法无法提取,只能使用search方法。

 import re content ='hello 123456 World_This is a Regex Demo' result = re.match('\d{6}',content) print(result) import re content ='hello 123456 World_This is a Regex Demo' result = re.search('\d{6}',content) print(result) print(result.group())

运行结果如下:

匹配演练

可以匹配代码里结构相同的部分,这样可以返回你需要的内容

 import re content = '2009年中信出版社出版图书' result = re.search('(.*?)',content) print(result.group(1)) 2009年中信出版社出版图书 re.findall(pattern,string,flags=0)

搜索字符串,以列表形式返回全部能匹配的字串

 import re html =''' <li> 网络歌曲</li><li> 2009年中信出版社出版图书</li> ''' result = re.findall('(.*?)',html,re.S) count = 0 for list in result: print(result[count]) count+=1 网络歌曲 2009年中信出版社出版图书 re.sub( pattern,repl,string,count,flags)

re.sub共有五个参数

三个必选参数 pattern,repl,string

两个可选参数count,flags

替换字符串中每一个匹配的字符串后替换后的字符串

 import re content = 'hello 123456 World_This is a Regex Demo' content = re.sub('\d+','',content) print(content)

运行结果如下:

hello  World_This is a Regex Demo
import re
content = ‘hello 123456 World_This is a Regex Demo’
content = re.sub(‘\d+’,’what’,content)
print(content)

运行结果如下:

hello what World_This is a Regex Demo
import re
content = ‘hello 123456 World_This is a Regex Demo’
content = re.sub(‘(\d+)’,r’\1 789′,content)
print(content)

运行结果如下:

hello 123456 789 World_This is a Regex Demo

注意:这里\1代表前面匹配的123456

演练

在这里我们替换li标签

 import re html =''' <li> 网络歌曲</li><li> 2009年中信出版社出版图书</li> ''' html = re.sub('<li>|</li>','',html) print(html)

运行结果如下,里面就没有li标签

 网络歌曲2009年中信出版社出版图书 compile(pattern [, flags])

该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配

将正则表达式编译成正则表达式对象,以便于复用该匹配模式

 import re content = 'hello 123456 ' \ 'World_This is a Regex Demo' pattern = re.compile('hello.*?Demo',re.S) result = re.match(pattern,content) print(result.group()) 

运行结果如下:

hello 123456 World_This is a Regex Demo

综合使用

 import re html = ''' <div class="slide-page" style="width: 700px">  <div class="cover-wp"> </div><p> 解除好友2:暗网 <strong>7.9</strong></p> <div class="cover-wp"> </div><p> 镰仓物语 <strong>6.9</strong></p> <div class="cover-wp"> </div><p> 特工 <strong>8.3</strong></p> <div class="cover-wp"> </div><p> 幸福的拉扎罗 <strong>8.6</strong></p> <div class="cover-wp"> </div><p> 大师兄 <strong>5.2</strong></p> <div class="cover-wp"> </div><p> 风语咒 <strong>6.9</strong></p> <div class="cover-wp"> </div><p> 精灵旅社3:疯狂假期 <strong>6.8</strong></p> <div class="cover-wp"> </div><p> 狄仁杰之四大天王 <strong>6.2</strong></p> <div class="cover-wp"> </div><p> 摩天营救 <strong>6.4</strong></p> <div class="cover-wp"> </div><p> 复仇者联盟3:无限战争 <strong>8.1</strong></p></div> ''' count = 0 for list in result: print(result[count]) count+=1

运行结果如下:

(‘解除好友2:暗网’, ‘7.9’)
(‘镰仓物语’, ‘6.9’)
(‘特工’, ‘8.3’)
(‘幸福的拉扎罗’, ‘8.6’)
(‘大师兄’, ‘5.2’)
(‘风语咒’, ‘6.9’)
(‘精灵旅社3:疯狂假期’, ‘6.8’)
(‘狄仁杰之四大天王’, ‘6.2’)
(‘摩天营救’, ‘6.4’)
(‘复仇者联盟3:无限战争’, ‘8.1’)

总结

以上所述是小编给大家介绍的Python爬虫之正则表达式的使用教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对gaodaima搞代码网网站的支持!

以上就是Python爬虫之正则表达式的使用教程详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python爬虫之正则表达式的使用教程详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址