这里写目录标题
python网络爬虫使用正则表达式解析网页Python正则表达式严格的字符匹配正则表达式的广义化 使用正则表达式获取网页标题信息python网络爬虫
使用正则表达式解析网页
Python正则表达式
正则表达式是一种可以用于模式匹配和替换的工具,可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与待比较字符串或文件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序(替换删除等)。
严格的字符匹配
python只支持re模块进行正则表达式的书写
严格的字符匹配示例
查找
import reexample_obj = "1. A small sentence. - 2. Another tiny sentence. "re.findall('sentence',example_obj)#第一个参数为想要查找的字符,第二个参数为被查找的句子re.search('sentence',example_obj)re.sub('sentence','SENTENCE',example_obj)re.match('.*sentence',example_obj)
import restring = "1. A small sentence. - 2. Another tiny sentence."
findall()
该方法一般用的比较多
re.findall('sentence',string)#把所有符合要求的提取出来>>>['sentence', 'sentence']
search()
re.search('sentence',string)#只返回一个位置(第一个找到就停止搜索)可能遍历更快>>><_sre.SRE_Match object; span=(11, 19), match='sentence'>
match()
re.match('sentence',string)#该方法必须被查询语句的首字母就为查询字段,此时才会有相应结果的返回
re.match('1. A small sentence.',string)>>><_sre.SRE_Match object; span=(0, 20), match='1. A small sentence.'>
替换
sub(pattern, repl, string)
re.sub('small','large',string)>>>'1. A large sentence. - 2. Another tiny sentence.'
删除
将repl的参数换为空 ‘ ’
正则表达式的广义化
正则表达式的威力来源于能够编写灵活及广义化的查询条件
re.findall('small',example_obj)re.findall('s.all',example_obj)re.findall('s[a-z]all',example_obj)re.findall('small|tiny',example_obj)
常用广义化符号
(1)英文句号“.”:能代表除换行符“\n”任意一个字符;
s = 'small smell sm.ll sm?ll sm\nll're.findall('sm.ll',s)>>>['small', 'smell', 'sm.ll', 'sm?ll']
(2)字符类“[]”:被包含在中括号内部,任何中括号内的字符都会被匹配;
如果想要查找sm.ll
法一
s = 'small smell sm.ll sm?ll sm\nll're.findall('sm\.ll',s)
法二
s = 'small smell sm.ll sm?ll sm\nll're.findall('sm[.]ll',s)
法三
s = 'small smell sm.ll sm?ll sm\nll're.findall('sm\wll',s)
[]中唯一一个需要转义的符号为‘-’(转义方式加反斜杠)
(3)管道“|”:该字符被视为OR操作;
量化符号
sm.[1,3]ll表示前面的符号可出现一到三次逗号之间不能加空格
sm.*ll表示前面的符号可出现一次以上
sm.{1,}ll表示前面的符号可出现一次以上
sm.?ll表示前面的符号可出现零次或一次
sm.+ll表示前面的符号可出现零次以上部分有特殊含义的符号
import reexample_obj = "1. A small sentence. - 2. Another tiny sentence."re.sub('\\d','kkk','abc12de')re.sub('[0-9]','kk','abc12de')re.sub('\w','kk','abc,12de')re.sub('\w{2}','kk','abcbe 12de')re.findall('[b-z]+',example_obj)res=re.findall('\\b[b-z]+\\b',example_obj)
使用正则表达式获取网页标题信息
正则表达式能够提取文本中固定并重复出现的模式的一些抽象字符串序列。除了使用它们从纯文本中提取内容,还可以将正则表达式应用到HTML、XML文档中,识别并提取感兴趣的内容。如使用正则表达式查找使用requests库获取的网页内容中的title内容。import requestsimport reurl = '/tipdm/index.html'rq = requests.get(url)rq.encoding = 'utf-8're.findall('<li><a href="[a-z.:/]+" target="">(.+)</a></li>',rq.text)#括号表示提取里面的内容>>>['产品中心', '关于我们']
使用正则表达式无法很好的定位特定节点并获取其中的链接和文本内容,而使用Xpath和Beautiful Soup能较为便利的实现这个功能