实际上爬虫一共就四个主要步骤:

  • (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 里数量词默认是贪婪的。