爬虫学习笔记 - 数据解析

本文深入讲解正则表达式与XPath语法,演示如何利用Python的re模块和lxml库进行网页数据抓取,包括匹配模式、常用方法及实例应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则的语法

  • . 匹配到除了 \n 之外的所有字符, re.S 模式下可以匹配 \n, re.DOTALL 可以让正则表达式中的点(.)匹配包括换行符在内的任意字符
  • \ 转义
  • [] 或,选择其中的一个内容
  • | 或,选择 | 两边的内容
  • * 匹配 0 次或者多次
  • + 匹配一次或者多次
  • ? 非贪婪
  • \s 空白字符
  • \d 匹配数字

re模块的常见方法

  • pattern.match(从头找一个)

  • pattern.search(找一个)

  • pattern.findall(找所有)

    • 返回一个列表,没有就是空列表
    • re.findall("\d","chuan1zhi2") >> ["1","2"]
  • pattern.sub(替换)

    • re.sub("\d","_","chuan1zhi2") >> ["chuan_zhi_"]
  • re.compile(编译, 提高匹配效率)

    • 返回一个模型P,具有和re一样的方法,但是传递的参数不同

    • 匹配模式需要传到compile中

      p = re.compile("\d",re.S)
      p.findall("chuan1zhi2")
      
  • re模块的常用方法

    • re.findall(“regex”,“str”) #返回列表
    • re.sub("regex","_","str") #返回字符串
    • re.compile("regex",re.S) # 编译,提高匹配效率
  • 原始字符串r

    • 相对于特殊符号而言,表示特殊符号的字面意思
    • 用途
      • 正则:忽略转义符号带来的印象,加上r之后照着写\
      • windows下文件路径

xpath

选取节点

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

使用chrome插件选择标签时候,选中时,选中的标签会添加属性class="xh-highlight"

下面列出了最有用的表达式:
表达式描述
nodename选中该元素。
/从根节点选取、或者是元素和元素间的过渡。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
选取当前节点的父节点。
@选取属性。
text()选取文本。

xpath语法

  • // 的用途
    • //a 当前html页面上的所有的a
    • bookstore//book bookstore下的所有的book元素
  • @ 的使用
    • //a/@href 所有的a的href
    • //title[@lang="eng"] 选择lang=eng的title标签
  • text() 的使用
    • //a/text() 获取所有的a下的文本
    • //a[text()='下一页'] 获取文本为下一页的a标签
    • a//text() a下的所有的文本
  • xpath查找特定的节点
    • //a[1] 选择第一个
    • //a[last()] 最后一个
    • //a[position()<4] 前三个

lxml模块的使用

from lxml import etree
# 把 html 字符串转化为 element 对象,具有 xpath 方法
element = etree.HTML(html_str) #bytes或者str类型的字符串

element.xpath("xpath str")  #返回列表
# 把 element 对象转化为字符串, 会自动对页面进行调整
etree.tostring(element)  #转化为字符串

#数据提取时:先分组,在提取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值