正则表达式|py02
文章概览
- 数据解析的三种方式
- re模块的使用
爬虫可大致分为通用爬虫、聚焦爬虫、增量式爬虫;其中聚焦爬虫是爬取页面中指定的内容,提取的过程成为数据解析。
一、数据解析的三种常见方式
从网页获取到源代码后,我们想要拿到特定的数据该使用什么方法呢?
1、re解析:这种方式最快。
2、bs4解析:python独有的解析方式,这种使用简单。
3、xpath解析:一种高效便捷的通用解析方式,xpath是目前流行的一种数据解析方式
bs4解析原理是通过实例化一个BeautifulSoup对象,将爬取到的数据加载到该对象中,最后通过BeautifulSoutp对象的属性和方法进行数据解析。
xpath解析原理是通过实例化一个etree对象,将爬取到的数据加载到该对象中,最后通过调用该对象的xpath方法并结合xpath表达式来进行数据解析。
二、python的re模块使用
python的re模块也就是正则表达式,通过正则表达式来提取数据。
findall提取数据
拿到整数并存放到列表中:
import re
lst = re.findall(r"\d+", "num1:12345,num2:34455")
print(lst)
findall:匹配字符串中所有的符合正则的内容,返回一个列表,但列表效率并不高。
finditer提取数据
拿到字符串里的数字串,并存放到迭代器里:
import re
it = re.finditer(r"\d+", "num1:12345,num2:34455")
for i in it:
print(i)
finditer:匹配字符串中所有的内容【返回的是迭代器】,从迭代器中拿到内容需要.group()函数。
其他类似的存储匹配的数据的方式还有search,search找到一个结果就返回,返回的结果是match对象,(迭代器里面是一个个match),因此拿数据需要.group()函数。
预加载
预加载正则表达式,在程序开始时就将正则表达式加载到内存上,可以提高一点效率。
import re
obj = re.compile(r"\d+")
it = obj.finditer("num1:234234,num2:4898493")
for i in it:
print(i.group())
flag
re.S:能让.匹配换行符。比如.*?提取一段任意字符,为了防止中断,可以使用re.S来匹配换行符。
浙公网安备 33010602011771号