一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值。内容一般分为两部分,非结构化的数据 和 结构化的数据。
非结构化数据:先有数据,再有结构,
结构化数据:先有结构、再有数据
不同类型的数据,我们需要采用不同的方式来处理。
文本、电话号码、邮箱地址:正则表达式
HTML 文件:正则表达式、XPath、CSS选择器
JSON 文件:JSON Path、转化成Python类型进行操作(json类)
XML 文件:转化成Python类型(xmltodict)、XPath、CSS选择器、正则表达式
正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
实际是爬虫一共有四个主要步骤: 1 明确目标 2 爬取数据 3 去掉多余数据 4 处理转换数据(存储和使用)
那么 因为数据全是网页的数据,这些数据很庞大并且混乱,因此我们需要将之按我们的需要过滤和匹配出来。那么对于文本的过滤或者规则的匹配,最强大的就是正则表达式。
正则表达式引擎→正则表达式文本(翻译)→正则表达式对象→需要匹配的文本(匹配)→匹配结果
正则表达式引擎编译表达式字符得到的对象,包含应如何进行匹配的信息
正则表达式对象对文本进行匹配后的到的结果包含了这次的成功匹配的信息,如匹配到的字符串、分组以及在文本中的索引。
在 Python 中,我们可以使用内置的 re 模块来使用正则表达式。
有一点需要特别注意的是,正则表达式使用 对特殊字符进行转义,所以如果我们要使用原始字符串,只需加一个 r 前缀,示例:r’chuanzhiboke\t.\tpython’
re 模块的一般使用步骤如下:
1 使用 compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象:
compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:
import re
#将正则表达式编译成 Pattern 对象
pattern = re.compile(r'\d+')
在上面,我们已将一个正则表达式编译成 Pattern 对象,通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果,一个 Match 对象。
Pattern 对象的一些常用方法主要有:
match 方法:match 方法用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。
search 方法:search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。
findall 方法:上面的 match 和 search 方法都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。
finditer 方法:finditer 方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。
split 方法:split 方法按照能够匹配的子串将字符串分割后返回列表。
sub 方法:sub 方法用于替换
最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的操作