正则表达式|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()函数。

image.png

 其他类似的存储匹配的数据的方式还有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来匹配换行符。

posted @ 2022-11-14 21:04  钱有学  阅读(19)  评论(0)    收藏  举报