数据匹配的三种方法:正则、xpath、bs4
1.正则 :import re
正则表达式可以判断目标字符串是否符合特定要求,比如手机号、身份证号、邮箱号等。
常用的标记如下:
# digit
\d :表示任意的一位数字
\d\d:表示任意的两位数字
# word
\w:表示任意的一个字母和数字
# space
\s:表示 空格
. :表示任意的内容 123 a,b,c,!@# 不单独使用 经常放到字符串后面
a.: 在a后边匹配任意内容 ad ac af
*:表示*前边的内容出现0次到多次
a.*:a a1 ab aaaa a111 abbbb
+ :表示+前边的内容出现一次到多次
a.+ : aa ab ax am an abb
? :表示?前面的内容出现0次到一次
a.? : a a1
^ : (脱字符) 表示以。。。开头
$ : 表示以。。。结尾
{n} :表示内容重复多次(n次) \d\d\d = \d{3}
{n,m} 表示最少重复n次,最多重复m次
{n,} : 表示最少重复n次
{,m} : 表示最多重复m次
正则又分为三种查找方法:re.math() , re.search() , re.findall()
其中,re.math()是要从所匹配的字符串的起始位置开始匹配只且只输出一个符合正则表达式的值;
re.search()是从要匹配 的字符串的任意位置匹配,但是只输出第一个找到的匹配值;
re.findall()从所有要匹配的字符串的任意位置开始匹配,并且输出所有的值,因此平时查找时多用此方法。
基本正则表达式为;
pattern = re.compile('(\d)(\w+)')
content = '123helloWorld'
result = re.findall(pattern,content)
正则表达式中,替换为 :sub,方法如下:
content = '杨过大战金轮法王,郭靖观战'
pattern = re.compile(r'杨.*?过')
result = pattern.sub('吕布',content)
print(result)
2.xpath方法:from lxml import etree
该方法会检测字符串内容是否为标签样式,但是不能检测内容是否为真的标签
html_str = """
<a href="https://www.baidu.com">
百度一下,你就知道
</a>
"""
result = etree.fromstring(html_str)
print(result)
# parse 解析
html = etree.parse('index.html')
print(type(html))
print(html)
常用的查找方式如下:
3.bs4方法:from bs4 import BeautifulSoup
BeautifulSoup是python的一个第三方库,它和xpath的作用一样,都是用来解析html数据,相比之下xpath的速度更快一些。
BeautifulSoup里面需要两个参数,一个为open方法,另一个为固定写法 'lxml'。
bs = BeautifulSoup(open('index.html',encoding='utf-8'),'lxml')
print(bs)
# beautifulsoup 转化的为类对象
print(type(bs))
# 获取网页当中的title标签
print(bs.title)
常用的查找方法如下: