Python爬虫之数据解析


在爬虫爬取数据的过程中,往往我们需要的只是网页中的一部分数据,而不是整张页面数据,因此在这个过程中就需要我们用到数据解析,通过数据解析获取我们想要爬取的内容。

常用的数据解析的方式大概分为三种:

1.正则表达式

匹配:

  • re.match(pattern,string,flags=0)
    参数:pattern匹配的正则表达式,string要匹配的字符串,flags=0从字符创开头进行匹配,匹配成功回返回一个匹配的对象。类型是<class’_sre.SRE_Match’>
  • re.search(pattern,string,flags=0)
    参数同上
    **注意:**match方法和search方法最大的区别是,match如果开头就不和正则表达式匹配,则直接返回None,而search则是匹配整个字符串。

检索与替换:

  • re.findall(pattern ,string ,flags=0)
    遍历字符串,找到正则表达式匹配的所有位置,并以列表的形式返回。
  • re.finditer(pattern ,string ,flags=0)
    遍历字符串,找到正则表达式匹配的所有位置,并以迭代器的形式返回。
  • re.sub(pattern ,repl,string ,count=0,flags=0)
    repl为替换的字符串,可以使函数,count为替换的最大次数,默认值0代表替换所有的匹配。
  • re.split(pattern ,string ,maxsplit=0,flags=0)
    maxsplit为设置分割的数量,默认值0对所有满足匹配的字符串进行分割,并返回列表。

正则规则:

字符作用
.匹配任意一个字符(除了\n)
[ ]匹配[ ]中列举的字符
[^…]匹配不在[ ]中的字符
\d匹配数字0到9
\D匹配非数字
\s匹配空白,空格和tab
\S匹配非空白
\w匹配字母、数字、下划线:a-z ,A-Z ,0-9 ,_
\W匹配非字母数字,下划线
-匹配范围,如[a-f]
  • 字符匹配
    可以匹配字母数字符号等。在正则表达式中,可以使用字符来匹配文本中响应字符。
  • 字符集合
    字符集合可以匹配文中的任何一个字符。在正则表达式中,字符集合用[ ]表示。例如,可以使用[abc]匹配文本中的abc。
  • 范围
    范围是一组连续的字符,可以用来匹配文本中的任何一个字符。在正则表达式中,范围用连字符-表示。例如,正则表达式[a-z]可以匹配文本中的任何一个小写字母。使用{m,n} 表示出现次数的范围m表示至少出现m次,n表示最多出现n次
  • 量词
    在正则表达式中,量词用花括号{}表示。例如,正则表达式a{3}可以匹配文本中连续出现三个字母a的字符串。
  • 通配符
    在正则表达式中,通配符用句点.表示。例如,正则表达式a.b可以匹配文本中包含一个字母a和一个字母b的字符串。
  • 转义字符
    在正则表达式中,转义字符用反斜杠\表示。例如,正则表达式.可以匹配文本中的句点。
  • 分组
    分组用于将多个字符或字符集合组合在一起。在正则表达式中,分组用圆括号()表示。例如,正则表达式(a|b)可以匹配文本中的字母a或字母b。
  • 锚点
    锚点用于指定匹配的位置。在正则表达式中,锚点有两种:^和$。^用于匹配文本的开头,$用于匹配文本的结尾。例如,正则表达式^a可以匹配以字母a开头的字符串,正则表达式a$可以匹配以字母a结尾的字符串。
  • 模式修饰符
    模式修饰符用于修改正则表达式的匹配规则。在正则表达式中,模式修饰符用字母表示。例如,i修饰符用于忽略大小写,g修饰符用于全局匹配。例如,正则表达式/a/i可以匹配文本中的字母a或A。
  • 出现次数的表示符号 * + ?
    * 表示出现 0次 或者 至少1次
    + 表示出现 至少1次
    ? 表示出现 0次 或者 1次

  • * 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
    贪婪:匹配尽可能多的字符串
    <.*>
    非贪婪:只需要匹配到就可以
    <.*?>

2.bs4(BeautifulSoup4了解)

它的作用是能够快速方便简单的提取网页中指定的内容,给我一个网页字符串,然后使用它的接口将网页字符串生成一个对象,然后通过这个对象的方法来提取数据。
Tag对象:是html中的一个标签,用BeautifulSoup就能解析出来Tag的具体内容,具体的格式为‘soup.name‘,其中name是html下的标签。
BeautifulSoup对象:整个html文本对象,可当作Tag对象
NavigableString对象:标签内的文本对象
Comment对象:是一个特殊的NavigableString对象,如果html标签内存在注释,那么它可以过滤掉注释符号保留注释文本最常用的还是BeautifulSoup对象和Tag对象

3.xpath表达式(重点)

常用且便捷高效
xpath解析原理及环境安装

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
选取当前节点的父节点。
@选取属性。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式结果
bookstore选取 bookstore 元素的所有子节点。
/bookstore选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。

提示:如果 XPath 的开头是一个斜线(/)代表这是绝对路径。如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<4]选取最前面的三个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=‘eng’]选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值