Spider-3.Re
Python_爬虫系列文章目录
Python_爬虫系列_1.BeautifulSoup
Python_爬虫系列_2.XPath
Python_爬虫系列_3.Re(正则表达式)
Python_爬虫系列_4.Numpy库的学习
Python_爬虫系列_5.Pandas,Matplotlib,Pyecharts和Echarts
Python_爬虫系列_10.综合案例
前言
毋庸置疑,regex的重要性,不言而喻,那里都是需要用到他的,那就让我们开始吧
一、Re是什么?
正则表达式是用来简洁表达一组字符串的表达式
正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具
正则表达式可以用来判断某字符串的特征归
二、Re的语法
正则表达式语法由字符和操作符构成
1,常用操作符
2,实例
3,python的Re库
- re.search(pattern, string, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 在一个字符串中搜索匹配正则表达式的第一个位置
返回match对象
- re.match(pattern, string, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 从一个字符串的开始位置起匹配正则表达式
返回match对象
- re.findall(pattern, string, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 搜索字符串,以列表类型返回全部能匹配的子串
- re.split(pattern, string, maxsplit=0, flags=0) ∙ pattern :
正则表达式的字符串或原生字符串表示 ∙ string : 待匹配字符串 ∙ maxsplit: 最大分割数,剩余部分作为最后一个元素输出
∙ flags : 正则表达式使用时的控制标记 将一个字符串按照正则表达式匹配结果进行分割 返回列表类型
- re.finditer(pattern, string, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
string : 待匹配字符串 ∙ flags : 正则表达式使用时的控制标记 搜索字符串,返回一个匹配结果的迭代类型,每个迭代
元素是match对象
- re.sub(pattern, repl, string, count=0, flags=0) ∙ pattern :
正则表达式的字符串或原生字符串表示 ∙ repl : 替换匹配字符串的字符串 ∙ string : 待匹配字符串 ∙ count :
匹配的最大替换次数 ∙ flags : 正则表达式使用时的控制标记 在一个字符串中替换所有匹配正则表达式的子串 返回替换后的字符串
3.另一种用法
>>> rst = re.search(r'[1‐9]\d{5}', 'BIT 100081')
#与下面的一种等价的
>>> pat = re.compile(r'[1‐9]\d{5}')
>>> rst = pat.search('BIT 100081')
- regex = re.compile(pattern, flags=0) ∙ pattern : 正则表达式的字符串或原生字符串表示 ∙
flags : 正则表达式使用时的控制标记
4.最小匹配和贪婪匹配
#贪婪匹配
>>> match = re.search(r'PY.*N', 'PYANBNCNDN')
>>> match.group(0)
'PYANBNCNDN'
#最小匹配
>>> match = re.search(r'PY.*?N', 'PYANBNCNDN')
>>> match.group(0)
'PYAN'
三,案例
代码如下(示例):
import requests
import re
url = 'http://www.cntour.cn/'
strhtml = requests.get(url) # get方式,获取网页数据
#print(strhtml.text)
#指定lxml解析器,将HTML文档转换成树形结构
#pattern = r'<li class="top"><a target="_blank" href="(.+)" title="(.+)">.+</a></li>'
#pattern1=r'<li class="top"><a target="_blank" href="(.+)" title="(.+)">.+</a></li>'
pattern=r'<li class=".+"><a target="_blank" href="(.+)" title="(.+)">.+</a></li>'
#<a target="_blank" href="http://www.cntour.cn/news/19059/" title="文旅部:国有景区年底实现在线预约">文旅部:国有景区年底实现在线预约</a>
data = re.findall(pattern, strhtml.text)
print(data)
# soup匹配到的有多个数
#print(len(data))
for i in data:
print(i)
for item in data:
href, name = item
result = {
'title': name, # 标题
'link': href, # 超链接
#'ID': re.findall('\d+', item.get('href'))
}
print(result)
四,总结
吸收,汲取,成为更好的自己