实际上爬虫一共就四个主要步骤:
- (1)明确目标 (要知道你准备在哪个范围或者网站去搜索)
- (2)爬 (将所有的网站的内容全部爬下来)
- (3)取 (去掉对我们没用处的数据)
- (4)处理数据(按照我们想要的方式存储和使用)
对于文本的过滤或者规则的匹配,最强大的就是正则表达式,是 Python 爬虫世界里必不可少的神兵利器。
1.re模块
re 模块的一般使用步骤如下:
使用 compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象。通过 Pattern对象提供的一系列方法对文本进行匹配查找,获得匹配结果。
- compile 函数
compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:
pattern=re.compile('\d{11}')
在上面,我们已将一个正则表达式编译成 Pattern 对象,接下来,我们就可以利用pattern 的一系列方法对文本进行匹配查找了。 Pattern 对象的一些常用方法主要有:
match -----从起始位置开始查找,一次匹配
search -----从任何位置开始查找,一次匹配
findall -----全部匹配,返回列表
finditer -----全部匹配,返回迭代器
split -----分割字符串,返回列表
sub -----替换
findall -----搜索整个字符串,获得所有匹配的结果
- 常见元字符:
. 匹配除换行符以外的任意一个字符
^ 匹配行首/abc http:ww.. ^/.*?/$
$ 匹配行尾
? 重复匹配 0 次或 1 次
* 重复匹配 0 次或更多次
+ 重复匹配 1 次或更多次
{n,} 重复 n 次或更多次
{n,m} 重复 n~m 次
[a-z] 任意字符
[abc] a/b/c 中的任意一个字符
{n} 重复 n 次
\s 匹配任意空白,包括空格,制表符(Tab),换行符
\S 匹配任意不是空白符的字符
\w 匹配字母,数字,下划线
\W 匹配任意不是字母,数字,下划线的字符
\d 匹配数字
\D 匹配任意非数字的字符
\b 匹配单词的开始和结束
\B 匹配不是单词开始和结束的位置
[^a] 匹配除了 a 以外的任意字符
[^(123|abc)] 匹配除了 123 或者 abc 这几个字符以外的任意字符
实例
import requests
import re
pattern=re.compile('\d{11}')
url='http://langlang2017.com'
response=requests.get(url)
html=response.content.decode('utf-8')
phone=pattern.findall(html)
srcs=re.findall('src="(i.*)"',html)
print(phone)
print(srcs)
2.贪婪模式与非贪婪模式
贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配 ( * );
非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配 ( ? );
Python 里数量词默认是贪婪的。