实际上爬虫一共就四个主要步骤:
(1)明确目标(要知道你准备在哪个范围或者网站去搜索)
(2)爬(将所有的网站的内容全部爬下来)
(3)取(去掉对我们没用处的数据)
(4)处理数据(按照我们想要的方式存储和使用)
我们在之前的案例里实际上省略了第 3 步,也就是"取"的步骤。因为我们 down 下了的
数据是全部的网页,这些数据很庞大并且很混乱,大部分的东西是我们不关心的,因此我们
需要将之按我们的需要过滤和匹配出来。
那么对于文本的过滤或者规则的匹配,最强大的就是正则表达式,是 Python 爬虫世界
里必不可少的神兵利器。
第一步: 使用compile()函数将正则表达式的字符串形式编译为一个Pattern对象
第二步:通过Pattern对象提供的一系列方法对文本进行匹配查找,获取匹配结果,一个Match对象
第三步:最后使用Match对象提供的属性和方法获取信息,根据需要进行其他的操作
import re
re.S----.可以匹配换行符—.现在啥都能匹配了。
re.I—忽略大小写
(1)match:从头开始匹配,只匹配一次,返回match对象
Match = pattern.match( string,#要匹配的目标字符串 pos,#要匹配目标字符串的起始位置(可选) endpos#结束位置(可选) ) #match对象属性 #1、取内容 print(m3.group(0)) #2、取匹配范围 print(m3.span(0)) # 3、取起始位置 print(m3.start(0),m3.end())(2)search:从任意位置匹配,只匹配一次,返回match的对象
Match = pattern.search( string,#要匹配的目标字符串 pos,#要匹配目标字符串的起始位置(可选) endpos#结束位置(可选) )(3)findall:全文匹配,匹配多次,返回list。
list= pattern.findall( string,#要匹配的目标字符串 pos,#要匹配目标字符串的起始位置(可选) endpos,#结束位置(可选) )(4)finditer:全文匹配,匹配多次,返回可迭代对象
补充:
可迭代对象和迭代器。可迭代对象:——iter——
迭代器:——next——,——iter——
对于可迭代对象,我们都是通过for循环来进行遍历获取数据的。
1、贪婪和非贪婪是对数量控制符的限时,作用对象就是数量控制符。
2、贪婪表示数量控制符取最大值,非贪婪表示数量控制符取最小值。
3、正则模式数量控制符取最大值也是默认贪婪模式。非贪婪需要通过?来控制。
\d+?4、非贪婪主要用于精确查找。
import re # p1 = re.compile(r'ab*')#[0,3] p1 = re.compile(r'ab*?')#[0,3] r1 = p1.findall('abbbc') # print(r1) #在非贪婪的情况下,就取最小值:0 p3 = re.compile(r'ab+?')#[1,3] r3 = p3.findall('abbbc') print(r3) # p4 = re.compile(r'ab?') p5 = re.compile(r'ab??')#[0,1] r5 = p5.findall('abbbc') print(r5) import re s = 'aa<div>test1</div>bb<div>test2</div>cc' pattern1 = re.compile('<div>.*</div>')#[5,24] pattern2 = re.compile('<div>.*?</div>')#[5,24] result1 = pattern1.findall(s) result2 = pattern2.findall(s) print(result1) #['<div>test1</div>bb<div>test2</div>'] print(result2) #['<div>test1</div>'] #.*?---