第一节、爬虫的原理
访问网站的时候,客户端会向服务器发送请求,服务器会回复响应数据,爬虫就是通过抓取响应数据并进行清理而获取信息。
一、正则表达式
1.1、基本表达式
表达式 | 说明 |
---|---|
. | 除了\n和\r之外所有的字符 |
\d | 数字 |
\D | 非数字 |
\w | 字母和下划线 |
\W | 非字母和下划线 |
\s | 空格(包括制表符、换页符) |
[a-z] | 小写英文字母 |
A-Z0-9] | 大小写英文字母与数字 |
[123] | 数字123 |
[^123] | 不是数字123 |
表达式 | 说明 |
---|---|
* | 出现次数>=0 |
+ | 出现次数>=1 |
? | 出现次数0或者1 |
{n} | 出现次数=n |
{n,m} | 出现次数大于等于n,小于等于m |
^ | 以x开头 |
& | 以x结尾 |
? | 关闭贪婪模式 |
() | 用于括号内匹配成功的字符串 |
二、案例分析
1、定义密码正则表达式:
规则,以英文字母开头,可以包括数字、大小写字母、下划线,长度为6~16位。
匹配表达式 如下:
password_partten = ^[a-zA-z]{1}[a-zA-Z0-9]{5,15}$
2、匹配div标签,class=‘class1’中的文本内容:
<div class = 'class1' 要匹配的内容</div>
匹配表达式如下:
div_partten1 = '<div class = 'class1'>(.*)</div>'
匹配的结果为:
“要匹配的内容”
相同的表达式,如果div标签如下,那么会匹配出什么结果呢:
<div><div class = 'class1'>要匹配的内容</div></div>
匹配的结果为:
<div class = 'class1'>要匹配的内容</div></div>
因为表达式默认开启的贪婪模式,贪婪模式会尽可能多的匹配字符。如果要精确匹配,需要用到如下表达式:
div_partten1 = '<div class = 'class1'>(.*?)</div>'
在(.*)中加上?号,关闭贪婪模式。这样在匹配到第一个div标签后,就不会匹配了。
第二节 爬虫之数据提取与清洗策略 re模块使用案例
一、环境创建(模块引入)
在python中使用正则表达式需要引入re模块:import re
二、数据提取
import
ret = re.findall([正则表达式],[被提取的字符串])
注意:返回的类型是列表,如果没有提取成功,返回的是一个空的列表。
三、数据匹配
import re
ret = re.match([正则表达式],[被提取的字符串])
注意:如果匹配成功,返回<class ‘re.match’>对象,如果匹配不成功,则返回None。
三、数据替换
import re
ret = re.sub([正则表达式],