python网络爬虫:使用正则表达式解析网页
这里写目录标题
- python网络爬虫
- 使用正则表达式解析网页
- Python正则表达式
- 严格的字符匹配
- 正则表达式的广义化
- 使用正则表达式获取网页标题信息
python网络爬虫
使用正则表达式解析网页
Python正则表达式
正则表达式是一种可以用于模式匹配和替换的工具,可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与待比较字符串或文件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序(替换删除等)。
严格的字符匹配
python只支持re模块进行正则表达式的书写
- 严格的字符匹配示例
查找
import re
example_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 re
string = "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操作;
| 部分有特殊含义的符号 | 含义 |
|---|---|
| \w | 数字和字母字符:[0-9a-zA-Z] |
| \W | 与\w反义 |
| \s | 空白字符 |
| \S | 非空白字符 |
| \d | 数字:[0-9] |
| \D | 非数字:[^0-9] |
| \b | 单词的边界 |
| \B | 非单词边界 |
- 量化符号
sm.[1,3]ll表示前面的符号可出现一到三次逗号之间不能加空格
sm.*ll表示前面的符号可出现一次以上
sm.{1,}ll表示前面的符号可出现一次以上
sm.?ll表示前面的符号可出现零次或一次
sm.+ll表示前面的符号可出现零次以上
| Python正则表达式里的量化符 | 说明 |
|---|---|
| ? | 前面的元素是可选的,并且最多匹配1次 |
| * | 前面的元素会被匹配0次或多次 |
| + | 前面的元素会被匹配1次或多次 |
| {n,} | 前面的元素至少会被匹配n次 |
| {n,m} | 前面的元素至少匹配n次,至多匹配m次 |
- 部分有特殊含义的符号
import re
example_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 requests
import re
url = 'http://www.tipdm.com/tipdm/index.html'
rq = requests.get(url)
rq.encoding = 'utf-8'
re.findall('(.+) ',rq.text)#括号表示提取里面的内容
>>>['产品中心', '关于我们']
使用正则表达式无法很好的定位特定节点并获取其中的链接和文本内容,而使用Xpath和Beautiful Soup能较为便利的实现这个功能
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
