XPath 入门到精通:用爬虫实战快速掌握数据提取技巧

一、XPath 是什么?为什么爬虫必备?

XPath 是一种在 XML/HTML 文档中定位元素的语言,爬虫用它来 “精准抓取” 网页数据。
核心优势

  • 比正则表达式更简洁、高效
  • 支持层级定位(父 / 子 / 兄弟节点)
  • 可根据属性、文本内容筛选元素

类比:如果把网页比作图书馆,XPath 就是 “找书指南”,能快速定位到你想要的 “数据书籍”。

二、XPath 基础语法(5 分钟速通)

1. 绝对路径与相对路径
  • 绝对路径:从根节点开始,用 / 分隔(如:/html/body/div
  • 相对路径:从当前节点开始,用 // 表示任意层级(如://div
2. 常用选择器
语法作用示例
//tag选取所有 tag 元素//div 选所有 div
//tag[@attr]选取带 attr 属性的元素//a[@href] 选链接
//tag[@attr='value']精确匹配属性值//input[@type='text']
//tag[text()='内容']按文本内容筛选//h3[text()='热门推荐']
//tag[index]按索引选元素(从 1 开始)//li[3] 选第 3 个 li
3. 进阶技巧
  • 层级定位//div[@class='book']/h2(选 class 为 book 的 div 下的 h2)
  • 逻辑组合//div[@id='list'] or @class='item'](选 id 为 list 或 class 为 item 的 div)
  • 模糊匹配contains(@attr, '部分值')(如://a[contains(@href, 'product')]

三、XPath 实战:用爬虫验证学习成果

案例 1:爬取豆瓣电影 Top250(完整代码)

import requests

from lxml import etree

url = 'https://movie.douban.com/top250'

headers = {'User-Agent': 'Mozilla/5.0'} # 模拟浏览器

# 发送请求并解析HTML

response = requests.get(url, headers=headers)

html = etree.HTML(response.text)

# 使用XPath提取数据

movies = html.xpath('//div[@class="item"]')

for

movie in movies: title = movie.xpath('.//span[@class="title"]/text()')[0] # 电影名

rating = movie.xpath('.//span[@class="rating_num"]/text()')[0] # 评分

quote = movie.xpath('.//span[@class="inq"]/text()') # 短评

quote = quote[0] if quote else "无短评"

print(f"{title} - 评分: {rating} - 短评: {quote}")

XPath 解析详解
  1. 定位电影块//div[@class="item"]
    • 从任意位置开始,选 class 为 item 的 div(每个电影条目)。
  2. 相对路径提取数据
    • .//span[@class="title"] 中的 . 表示从当前电影块开始查找。
  3. 处理可能缺失的数据
    • quote = quote[0] if quote else "无短评" 避免因缺失短评导致程序崩溃。

四、XPath 调试技巧(必学!)

  1. 浏览器开发者工具
    • Chrome/Firefox 中右键元素 → Copy → Copy XPath 获取自动生成的路径。
    • 注意:自动生成的路径可能过于具体(如包含索引),需手动简化。
  2. 在线 XPath 测试工具
    • 推荐 XPath Tester,粘贴 HTML 代码后实时测试表达式。
  3. 常见错误排查
    • 无法定位元素:检查路径是否正确、是否有 iframe 嵌套。
    • 结果为空:可能因网页使用 JavaScript 动态加载数据(需用 Selenium 等工具)        总结XPath 是爬虫的 “瑞士军刀”,掌握它能让数据提取事半功倍。本文通过豆瓣电影案例,带你从语法入门到实战应用,后续可以尝试改造代码爬取其他网站(如京东商品、天气数据等)。动手实践才是掌握的关键,快打开开发者工具试试吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值